在Android系统中,如果应用需要弹出一个悬浮窗口,
就需要申请一项特殊权限“android.permission.SYSTEM_ALERT_WINDOW”
Android O之前
在Android O之前的系统中申请了该权限后,再给对应的window设置
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
params.type = WindowManager.LayoutParams.TYPE_PHONE;
悬浮窗口就可以显示出来。
Android O及更高版本
但是在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
补充
另外说一下:申请