Android申请悬浮窗权限的目的
悬浮窗权限是Android提供的权限中的特殊权限,要申请后再使用,否则会导致弹框不能显示、程序崩溃等问题
注意事项
- 悬浮窗适配总体思路
if(系统没有赋予APP弹出悬浮窗的权限){
等用户打开权限后,再弹出悬浮窗
}else{
直接弹出悬浮窗
} - 例如要显示一个Dialog设置其为 系统级别 的
mDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
有的文章说MIUI系统可设置为WindowManager.LayoutParams.TYPE_TOAST
避开悬浮框权限的申请,我的实践经验是不要这样设置,否则利用参考文献中的方法操作后dialog还是显示不出来
- 写程序时导入包要导正确,例如我们要用的Setting
import android.provider.Settings;
不要导错 - 不同api版本下对悬浮窗权限的处理方法
- 由于判断权限的类 AppOpsManager 是 API19 版本添加,所以Android 4.4 之前的版本(不包括4.4)就不用去判断了,直接调用 WindowManager 的 addView 方法弹出即可。
- 悬浮窗权限在 6.0 之后就被 google 单独拿出来管理了,好处就是对我们来说适配就非常方便了,在所有手机和 6.0 以及之后的版本上适配的方法都是一样的,首先要在 Manifest 中静态申请<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />权限,然后在使用时先判断该权限是否已经被授权,如果没有授权使用下面这段代码进行动态申请