Android O 特殊权限SYSTEM_ALERT_WINDOW申请,“permission denied for window type”报错处理

移动开发 waitig 2629℃ 百度已收录 0评论

在Android系统中,如果应用需要弹出一个悬浮窗口,就需要申请一项特殊权限“

android.permission.SYSTEM_ALERT_WINDOW

Android O之前的系统中申请了该权限后,再给对应的window设置

WindowManager.LayoutParams params = new WindowManager.LayoutParams();
params.type = WindowManager.LayoutParams.TYPE_PHONE;

悬浮窗口就可以显示出来。

但是在Android O的系统中,google规定申请

android.permission.SYSTEM_ALERT_WINDOW
权限的应用需要给悬浮窗口设置如下type:
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
params.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;

悬浮窗口才能显示出来,TYPE_APPLICATION_OVERLAY”是重点

如果不设置该TYPE,应用会Crash,报错如下(后面的2002表示设置的type为TYPE_PHONE):
AndroidRuntime: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@c8d1f1a -- permission denied for window type 2002

另外说一下:申请
android.permission.SYSTEM_ALERT_WINDOW
权限不能使用  requestPermissions 方法。
可以使用下面的方法:
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, 100);

onActivityResult(int requestCode, int resultCode, Intent data)
回调函数中处理。


本文由【waitig】发表在等英博客
本文固定链接:Android O 特殊权限SYSTEM_ALERT_WINDOW申请,“permission denied for window type”报错处理
欢迎关注本站官方公众号,每日都有干货分享!
等英博客官方公众号
点赞 (2)分享 (0)