美文网首页
检测是否具有悬浮窗权限Settings.canDrawOverl

检测是否具有悬浮窗权限Settings.canDrawOverl

作者: kongzue | 来源:发表于2020-04-16 15:23 被阅读0次

前情提要

有项目要实现悬浮窗,但在检查是否有悬浮窗权限时出现使用系统方法: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.canDrawOverl

    前情提要 有项目要实现悬浮窗,但在检查是否有悬浮窗权限时出现使用系统方法:Settings.canDrawOver...

  • Android权限适配(二)

    本文接 Android权限适配(一) 悬浮窗权限 悬浮窗权限同样属于上文中说到的特殊权限。 悬浮窗代码的设置 要使...

  • 悬浮窗上线

    [ 参考点: 悬浮窗(权限启动申请) || 悬浮窗( 权限使用时申请 )] -------------------...

  • android 悬浮窗

    安卓悬浮窗的书写,我们分为几个步骤: 1.添加悬浮窗权限 2.书写悬浮窗代码,搭建悬浮窗布局 3.判断悬浮窗权限是...

  • Android监听悬浮框是否显示解决方案

    1.引言 项目中用到android悬浮窗,可是有些手机即使在悬浮窗权限授权了也无法弹出。因为项目中要对悬浮窗是否弹...

  • 使用教程

    小米&华为&魅族打开悬浮窗权限 OPPO&VIVO打开悬浮权限 其他手机打开悬浮权限

  • Android悬浮窗探究

    需求:学习悬浮窗使用以及type参数影响 悬浮窗使用 在获得系统悬浮窗权限(SYSTEM_ALERT_WINDOW...

  • 悬浮窗权限

    权限 1、注册权限 2、动态申请权限 API19以后需要动态申请权限,API23以前默认是开放的,但是个别厂商自己...

  • Android 悬浮窗-开箱即用

    开箱即用的 Android 悬浮窗 开箱即用的 Android 悬浮窗 FloatWindowX 1. 需要权限 ...

  • Android悬浮手电的简单实现,简单但是很实用的功能

    在配置文件中添加悬浮窗权限和手电所需要的权限 Activity中开启service悬浮窗用来控制,当手机没有手电功...

网友评论

      本文标题:检测是否具有悬浮窗权限Settings.canDrawOverl

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