版权声明:本文为博主原创文章,未经博主允许不得转载。 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一下
//无需处理了
}
}