android– 如何处理SYSTEM_ALERT_WINDOW权限未在某些Marshmallow设备上自动授予

android– 如何处理SYSTEM_ALERT_WINDOW权限未在某些Marshmallow设备上自动授予,第1张

概述我一直在收到一些小米设备(例如Mi2,运行API级别21)没有显示叠加层的报告.我的应用针对API23.关于此,有severalposts.似乎MIUI设备在安装时不启用此权限(与其他Marshmallow之前的设备不同).不幸的是,Settings.canDrawOverlays()仅适用于Android23.>检查Marshmallow之前是否尚

我一直在收到一些小米设备(例如Mi 2,运行API级别21)没有显示叠加层的报告.我的应用针对API 23.

关于此,有several posts.似乎Miui设备在安装时不启用此权限(与其他Marshmallow之前的设备不同).

不幸的是,Settings.canDrawOverlays()仅适用于AndroID 23.

>检查Marshmallow之前是否尚未启用此权限的正确方法是什么?
>是否有意图将用户带到相关的MUIU设置页面?也许:新的Intent(“androID.settings.action.MANAGE_OVERLAY_PERMISSION”,packagename)但我无法测试这个.

解决方法:

使用以下方法检查您是否具有drawOverlays权限更安全:

@Suppresslint("NewAPI")public static boolean canDrawOverlayVIEws(Context con){    if(Build.VERSION.SDK_INT< Build.VERSION_CODES.LolliPOP){return true;}    try {         return Settings.canDrawOverlays(con);     }    catch(NoSuchMethodError e){         return canDrawOverlaysUsingReflection(con);     }}public static boolean canDrawOverlaysUsingReflection(Context context) {    try {        AppOpsManager manager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);        Class clazz = AppOpsManager.class;        Method dispatchMethod = clazz.getmethod("checkOp", new Class[] { int.class, int.class, String.class });        //AppOpsManager.OP_SYstem_ALERT_WINDOW = 24        int mode = (Integer) dispatchMethod.invoke(manager, new Object[] { 24, Binder.getCallingUID(), context.getApplicationContext().getPackagename() });        return AppOpsManager.MODE_ALLOWED == mode;    } catch (Exception e) {  return false;  }}

自定义ROM可以更改 *** 作系统,以便Settings.canDrawOverlays()不可用.小米设备和应用程序崩溃后发生了这种情况.

申请许可:

@Suppresslint("InlinedAPI")public static voID requestOverlayDrawPermission(Activity act, int requestCode){    Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + act.getPackagename()));    act.startActivityForResult(intent, requestCode);}
总结

以上是内存溢出为你收集整理的android – 如何处理SYSTEM_ALERT_WINDOW权限未在某些Marshmallow设备上自动授予全部内容,希望文章能够帮你解决android – 如何处理SYSTEM_ALERT_WINDOW权限未在某些Marshmallow设备上自动授予所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1103255.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存