1 Android Icon 设置
Android O 新特性介绍:自适应图标(Adaptive Icons)
| [Android O 自适应图标的意义何在?Google 设计师给你答案 | 科普](https://sspai.com/post/40230) |
使用 Image Asset Studio 创建应用图标(官网)
图标在线生成工具Android Asset Studio的使用
Android神兵利器之Image Asset Studio
Android O 新特性介绍:自适应图标(Adaptive Icons)
2 Android 启动页适配
冷启动设置的启动页的方案:
用layer-list实现图片旋转叠加、错位叠加、阴影、按钮指示灯
问题描述:
启动页设置 “android:windowBackground” 后在部分宽高比下显示被拉伸。
解决方案: Android 启动背景图怎么适配?【已解决】
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
android:opacity="opaque">
<item android:drawable="@color/black"/>
<item>
<bitmap android:src="@drawable/splash_bg" android:gravity="center"/>
</item>
</layer-list>
注意:全屏的启动页建议使用.9图,否则使用 layer-list 显示效果仍然不佳。.9图文件大小过大,微信启动不设置 windowBackground ,通过设置 SplashActivity 的 ImageView scaletype 为 centerCrop 来适配
3 Android StatusBar 适配
问题:
- 状态栏遮挡 contentView 显示的内容
4 Android 屏幕适配
Android 屏幕适配从未如斯简单(8月10日最终更新版)
5 Android 权限适配
Android6.0动态权限shouldShowRequestPermissionRationale的含义
6 进程保活相关(应用锁需求)
Android通过JobScheduler与设置前台服务实现进程保活
Android 进程常驻(0)—-MarsDaemon使用说明
通过 ANDROID 辅助功能「ACCESSIBILITY SERVICE」 检测任意前台界面
7 添加 Window 权限适配
总结:
API <= 24(7.0) 使用 TYPE_TOAST 漏洞可以不用申请权限,直接显示
API >= 25(7.1.1) TYPE_TOAST 漏洞已修复,需要申请“允许显示在其他应用上层”权限,使用 TYPE_SYSTEM_ALERT
API >= 26(8.0) 系统将会限制 TYPE_TOAST 的使用,会直接抛出异常,使用 TYPE_APPLICATION_OVERLAY
7.1 Window 全屏设置
实现:当手机开启导航栏时仍然全屏
public WindowManager.LayoutParams getWindowParams() {
WindowManager.LayoutParams layoutParams;
if (!PermissionUtil.isOverMarshmallow()) {
// < 6.0 使用 TYPE_TOST
if (RomUtils.checkIsOppoRom()) {
layoutParams = new WindowManager.LayoutParams(-1, -1, WindowManager.LayoutParams.TYPE_PRIORITY_PHONE, 263176, TRANSLUCENT);
} else {
layoutParams = new WindowManager.LayoutParams(-1, -1, WindowManager.LayoutParams.TYPE_TOAST, 263176, TRANSLUCENT);
}
} else {
if (PermissionUtil.isOverO()) {
// >= 8.0
layoutParams = new WindowManager.LayoutParams(-1, -1, WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, 263176, TRANSLUCENT);
} else {
layoutParams = new WindowManager.LayoutParams(-1, -1, WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, 263176, TRANSLUCENT);
}
}
layoutParams.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
//布局不受限制
layoutParams.flags |= WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
layoutParams.x = 0;
layoutParams.y = 0;
NoxApplication context = NoxApplication.getInstance();
WindowManager mWm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = mWm.getDefaultDisplay();
Point p = new Point();
display.getRealSize(p);
int statusHeight = ScreenUtil.getStatusHeight(NoxApplication.getInstance());
Log.d("hj", "WindowPermissionHelper.getWindowParams: statusHeight:" + statusHeight);
int navigationHeight = ScreenUtil.getNavigationHeight(NoxApplication.getInstance());
Log.d("hj", "WindowPermissionHelper.getWindowParams: navigationHeight:" + navigationHeight);
layoutParams.width = p.x;
layoutParams.height = p.y + navigationHeight;
Log.d("hj", "WindowPermissionHelper.getWindowParams: height:" + p.y);
Log.d("hj", "WindowPermissionHelper.getWindowParams: width:" + p.x);
return layoutParams;
}
View childAt = topBar.getChildAt(0);
LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) childAt.getLayoutParams();
layoutParams.topMargin = ScreenUtil.getNavigationHeight(this);
像360悬浮窗那样,用WindowManager实现炫酷的悬浮迷你音乐盒(上)
7.2 Window 中监听返回键
在Activity,Service,Window中监听Home键和返回键的一些思考,如何把事件传递出来的做法!
注意:主要的限制在 FLAG_NOT_FOCUSABLE,WindowManager.LayoutParams.flags 中不能设置该 flag,否则监听不到返回键
可以使用:windowParams.flags &= ~FLAG_NOT_FOCUSABLE 消除该 flag
8 Android 7.0 FileProvider 适配
Android 7.0 行为变更 通过FileProvider在应用间共享文件吧
解决 Android N 7.0 上 报错:android.os.FileUriExposedException
使用FileProvider解决file:// URI引起的FileUriExposedException
9 AlarmManager 使用
关于android的alarmmanager使用过程中的坑(包括魅族手机休眠后无法启动闹钟的问题)
10 AccessibilityService 使用
Android辅助功能AccessibilityService的使用
Android辅助功能原理与基本使用详解-AccessibilityService
Android自动化测试中AccessibilityService获取控件信息(1)
11 Android 自定义应用选择器
12 迎接 Androidx
问题:
Androidx和Android support库共存问题解决
Android:你好,androidX!再见,android.support
参考:
原包转换为androidx(Migrating to AndroidX)
13 Notification 监听
NotificationListenerService的那些事儿
NotificationListenerService不能监听到通知,研究了一天不知道是什么原因?
NotificationCollectorMonitorService.java
一次 NotificationListenerService 体验
Android利用NotificationListenerService实现消息盒子功能