Android 8.0以上悬浮窗权限正确开启方式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/eyishion/article/details/82787310

Android 8.0以上悬浮窗权限正确开启方式

开发中在android 8.0上遇到了一个判断悬浮窗权限是否开启的问题,当在一个界面弹出dialog提示用户开启悬浮窗权限,用户点击之后,跳转到设置界面开启悬浮窗权限,然后返回该页面,Settings.canDrawOverlays(context) 进行权限开启的判断,结果返回的是false;程序接收到的是权限没有开启,但是到设置里面查看确实是开启了的。而且当你对界面有刷新操作之后(去到其他界面、退出重新进入、点击按钮等等),检测到权限也是开启的。但是当你从界面跳转到设置并开启权限,然后返回界面直接调用Settings.canDrawOverlays(context)方法判断显示的是未开启。
搞得我很头晕,网上找了一堆资料,都没有效果,最后无意间注释了一行代码,

 // intent.setData(Uri.parse("package:" + getPackageName()));

结果一切都恢复正常了,我艹了,8.0以上的手机就是坑呀!再次记录一下,希望对遇到我这样问题的人有帮助;

完整的代码如下:

    private void requestSettingCanDrawOverlays() {
        Toast.makeText(SplashActivity.this, "请打开显示悬浮窗开关!", Toast.LENGTH_LONG).show();
        int sdkInt = Build.VERSION.SDK_INT;
        if (sdkInt >= Build.VERSION_CODES.O) {//8.0以上
            Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
            startActivityForResult(intent, REQUEST_DIALOG_PERMISSION);
        } else if (sdkInt >= Build.VERSION_CODES.M) {//6.0-8.0
            Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
            intent.setData(Uri.parse("package:" + getPackageName()));
            startActivityForResult(intent, REQUEST_DIALOG_PERMISSION);
        } else {//4.4-6.0一下
            //无需处理了
        }
    }

猜你喜欢

转载自blog.csdn.net/eyishion/article/details/82787310