安卓6.0关于悬浮窗导致"检测到屏幕叠加层"的开发端解决方案
2017-03-16 16:09
981 查看
安卓6.0以后当弹出权限授权框时,考虑到安全问题,如果屏幕上存在悬浮窗,会出现”检测到屏幕叠加层”的提示,导致不能正常授予权限。
最简单的解决方案就是手动关闭悬浮窗了,不过这样的用户体验当然是很糟糕的,今天要介绍的方法是在弹出授权框时自动隐藏悬浮窗,授权框消失后再恢复悬浮窗。
解决思路:如果能检测授权框弹出界面,就可以顺利解决问题,当然系统没有给开发者预留弹出授权框的接口,需要自己去检测界面的变化,因为是全局检测,所以自然就想到了辅助功能AccessibilityService了,可以在检测到窗口状态变化时,判断窗体所属的包名不是授权框所属包名”com.android.packageinstaller”,如果是则隐藏悬浮窗,如果不是则恢复悬浮窗的显示。
public void onAccessibilityEvent(final AccessibilityEvent accessibilityEvent) { if(accessibilityEvent.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED){ String foregroundPackageName = accessibilityEvent.getPackageName().toString(); if("com.android.packageinstaller".equals(foregroundPackageName)){ //进入授权界面,隐藏悬浮窗 }else{ //退出授权界面,恢复悬浮窗 } }
当然也可以监听授权框所属activity的变化,授权框activity包名为com.android.packageinstaller.permission.ui.GrantPermissionsActivity,可以监听onCreate()和finish()隐藏和显示悬浮窗,可以通过Xposed框架hook这两个方法实现,Xposed具体实现方法比较简单大家可以自行实现。
相关文章推荐
- Java中关于 BigDecimal 的一个导致double精度损失的"bug"
- 关于eclipse的"serializing cdt project settings"解决方案
- 关于eclipse的"serializing cdt project settings"解决方案
- 关于"没有找到MFC80UD.DLL,因此这个程序未能启动.重新安装应用程序可能会修复此问题"的解决方案
- "win10连接和断开电源的时候屏幕会黑一下"的解决方案
- 关于"Cannot change version of project facet Dynamic web module to 3.0"问题的简单解决方案(备忘)
- 升级sp3后出现"一个问题阻止windows正确检测此机器许可证"解决方案
- 【安卓6.0权限】安卓6.0系统提示“检测到屏幕叠加层”
- 关于cocos2dx的eclipse的"serializing cdt project settings"解决方案
- 关于"UnityEditor" namespace not found的问题的个人解决方案
- Android 6.0 关于检测到屏幕叠加层的问题
- 关于"Mobile开发客户端的屏幕尺寸大小"的解答
- 关于附加数据库出错,请单击"消息"列的超链接的解决方案
- 关于IE下的"错误: 由于出现错误 80020101 而导致此项操作无法完成"和fireFox下的"syntax error”
- 关于"SAPI" not supported的解决方案
- "struts中文问题","struts国际化问题"的终极解决方案
- 内存不能为"read"的完美解决方案
- 关于"找不到与frontpage服务器通信的组件"问题的解决方案
- 关于"RPC server is unavailable"的解决方案
- Daemon Tools 4.x 或"SPTD.SYS"导致Windows不能启动的问题的解决方案