美文网首页
机型阿坑2.0

机型阿坑2.0

作者: 卡路fly | 来源:发表于2020-04-03 16:03 被阅读0次

机型坑

  • 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方法中进行判断是否重复启动

小米华为某些机型存在, Home 键让 APP 后台运行, 重新打开 APP 导致重启的解决方案

静态注册广播收不到广播

在注册系统广播之后,收到广播是有条件,并不是每次都能够收到,在该品牌机型中要求: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界面。


相关文章

网友评论

      本文标题:机型阿坑2.0

      本文链接:https://www.haomeiwen.com/subject/hytkphtx.html