Android 如何检查悬浮窗是否显示

2025-05-18 13:58:49

1、首先,设置WindowManager.LayoutParams.type = TYPE_TOAST即可绕过权限,因为在view镙烨莲峪添加之前系统执行了一个检查权限的操作PhoneWindowManager.checkAddPermission()。

Android 如何检查悬浮窗是否显示

2、然后,虽然经历了很多Android版本,但是我们关心的那部分一直没有什么大变化,就是当type == TYPE_TOAST的时候switch语句直接break了,从而跳过了接下来的权限检查。

Android 如何检查悬浮窗是否显示

3、然后,需要注意的一点是TYPE_TOAST在最新的Android 7.1.1上已经被oogle制裁了,只允许添加一个,并且在API 25之后会直接崩溃,具体代码可以查看这里。

Android 如何检查悬浮窗是否显示

4、然后,看一下WindowManager的diff就知道了,不过6.0以上oogle已经提供了通用方法来开启悬浮窗权限,下文会提到,推荐大家去引导用户开启,不要使用暴力的解决方式。

Android 如何检查悬浮窗是否显示

5、然后,在PhoneWindowManager.checkAddPermission()中,系统使用了一个叫AppOpsManag髫潋啜缅er的类,最终调用其中的checkOp()方法来检查权限,但是这个方法本身是隐藏的。

Android 如何检查悬浮窗是否显示

6、最后,所以只能通过反射的方式来调用,另外还需要注意AppOpsManager是API 19才添加的,对于低于这个版本的系统并不能用此方法来检查权限。

Android 如何检查悬浮窗是否显示
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢