区块链技术博客
www.b2bchain.cn

检测是否具有悬浮窗权限Settings.canDrawOverlays(context) 不靠谱的解决方法求职学习资料

本文介绍了检测是否具有悬浮窗权限Settings.canDrawOverlays(context) 不靠谱的解决方法求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

前情提要

有项目要实现悬浮窗,但在检查是否有悬浮窗权限时出现使用系统方法:Settings.canDrawOverlays(context) 总是返回 true 而实际上没有授权悬浮窗权限的情况,测试设备为一加7Pro(Android Q)应该是系统 bug,上Stack Overflow瞅了一圈应该还不是个例,解决方案搬运如下:

解决方法:

使用以下方法判断

public static boolean canDrawOverlays(Context context) {     if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return true;     else if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {         return Settings.canDrawOverlays(context);     } else {         if (Settings.canDrawOverlays(context)) return true;         try {             WindowManager mgr = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);             if (mgr == null) return false; //getSystemService might return null             View viewToAdd = new View(context);             WindowManager.LayoutParams params = new WindowManager.LayoutParams(0, 0, android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O ?                     WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY : WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,                     WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSPARENT);             viewToAdd.setLayoutParams(params);             mgr.addView(viewToAdd, params);             mgr.removeView(viewToAdd);             return true;         } catch (Exception e) {             e.printStackTrace();         }         return false;     } }

原帖地址:

https://stackoverflow.com/questions/46173460/why-in-android-8-method-settings-candrawoverlays-returns-false-when-user-has

前情提要

有项目要实现悬浮窗,但在检查是否有悬浮窗权限时出现使用系统方法:Settings.canDrawOverlays(context) 总是返回 true 而实际上没有授权悬浮窗权限的情况,测试设备为一加7Pro(Android Q)应该是系统 bug,上Stack Overflow瞅了一圈应该还不是个例,解决方案搬运如下:

解决方法:

使用以下方法判断

public static boolean canDrawOverlays(Context context) {     if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return true;     else if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {         return Settings.canDrawOverlays(context);     } else {         if (Settings.canDrawOverlays(context)) return true;         try {             WindowManager mgr = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);             if (mgr == null) return false; //getSystemService might return null             View viewToAdd = new View(context);             WindowManager.LayoutParams params = new WindowManager.LayoutParams(0, 0, android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O ?                     WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY : WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,                     WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSPARENT);             viewToAdd.setLayoutParams(params);             mgr.addView(viewToAdd, params);             mgr.removeView(viewToAdd);             return true;         } catch (Exception e) {             e.printStackTrace();         }         return false;     } }

原帖地址:

https://stackoverflow.com/questions/46173460/why-in-android-8-method-settings-candrawoverlays-returns-false-when-user-has

前情提要

有项目要实现悬浮窗,但在检查是否有悬浮窗权限时出现使用系统方法:Settings.canDrawOverlays(context) 总是返回 true 而实际上没有授权悬浮窗权限的情况,测试设备为一加7Pro(Android Q)应该是系统 bug,上Stack Overflow瞅了一圈应该还不是个例,解决方案搬运如下:

解决方法:

使用以下方法判断

public static boolean canDrawOverlays(Context context) {     if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return true;     else if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {         return Settings.canDrawOverlays(context);     } else {         if (Settings.canDrawOverlays(context)) return true;         try {             WindowManager mgr = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);             if (mgr == null) return false; //getSystemService might return null             View viewToAdd = new View(context);             WindowManager.LayoutParams params = new WindowManager.LayoutParams(0, 0, android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O ?                     WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY : WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,                     WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSPARENT);             viewToAdd.setLayoutParams(params);             mgr.addView(viewToAdd, params);             mgr.removeView(viewToAdd);             return true;         } catch (Exception e) {             e.printStackTrace();         }         return false;     } }

原帖地址:

https://stackoverflow.com/questions/46173460/why-in-android-8-method-settings-candrawoverlays-returns-false-when-user-has

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 检测是否具有悬浮窗权限Settings.canDrawOverlays(context) 不靠谱的解决方法求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们