机型坑
-
Android 6.0 中,使用 SYSTEM_ALERT_WINDOW 绘制的悬浮窗不能含有 elevation 属性,否则会在真机上崩溃,模拟器正常。
-
使用 AppCompat v21+ 后,在 LG 4.1- 带有实体菜单键的机型上按菜单键会崩溃。
-
三星 5.0-5.1 机型上 DatePicker 控件会崩溃。
-
MIUI 上 SYSTEM_ALERT_WINDOW 需要额外申请权限,默认会拒绝掉,除非 type 设置为 TYPE_TOAST。
小米适配(这个小老弟…真是有够过分吼)
短信发送失败无回调
在发送短信时候,若系统拦截之后,若用户点击拒绝发送短信,这个时候发现一直收不到系统发送短信失败的广播回调,就会出现无回调不知道短信是否发送成功,这对于需要监听短信发送结果的要求是一个打击,用户往往很可能拒绝发送短信。
解决方案:使用安卓系统的权限管理进行权限,既能接受说明发送短信意图也能收到回调。这个时候系统在有权限申请之后,不会再默认拦截了。
应用安装完成后打开应用出现初始化两次
在调用系统安装应用程序完成安装之后,若用户直接通过这个程序打开应用进入之后,用户按home键退出回到桌面应用程序列表,又点击该应用的icon重新进入该应用,却发现应用是重新打开,而不是继续上次离开的界面,按道理应用不应该重新初始化,这是个系统bug。
解决方案:在启动Activity onCreate方法中进行判断是否重复启动
![](https://img.haomeiwen.com/i2179862/e0ad05566dae0d2b.png)
小米华为某些机型存在, Home 键让 APP 后台运行, 重新打开 APP 导致重启的解决方案
![](https://img.haomeiwen.com/i2179862/4b0216f39dbf036b.png)
静态注册广播收不到广播
在注册系统广播之后,收到广播是有条件,并不是每次都能够收到,在该品牌机型中要求:Receiver注册不能配置运行在非该应用包名下的进程中,否则收不到广播,广播只给不配置android:process的Receiver。同时要求是在当前进程应用没有退出的前提下,否则也收不到。
暂没有找到解决方案
小米检查后台弹窗权限
/**
* 小米官方检查后台弹出页面权限
*/
public static boolean canBackgroundStart(Context context) {
AppOpsManager ops = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
try {
int op = 10021; // >= 23
// ops.checkOpNoThrow(op, uid, packageName)
Method method = ops.getClass().getMethod("", new Class[]
{int.class, int.class, String.class});
Integer result = (Integer) method.invoke(ops, op, android.os.Process.myUid(), context.getPackageName());
return result == AppOpsManager.MODE_ALLOWED;
} catch (Exception e) {
LogUtil.e(TAG, "canBackgroundStart::not support");
}
return false;
}
PS: 其他手机型号待验证。
华为荣耀
- Toast不显示
在荣耀8机型上后台应用的toast不会被显示出来,只能当前在前台的应用TOAST提示。
解决方案:替换toast显示,改用其他方式,如dialog或者弹出activity界面。
网友评论