首页 > 移动开发 > ANDROID > Android悬浮框的适配问题
近日在写代码时,发现Android6.0及以下使用悬浮框会崩溃,最开始以为是权限的问题,但是在查找log时发现,报错的地方其实
mWindowManager.addView(floatView, mLayoutParams);
而floatview是内部定义的View,专门处理事件拦截的父View,大致是不会有错的,于是将目光放在LayoutParams上,LayoutParams实现的是WindowManager.LayoutParams(),WindowManager的addView是定义在接口ViewManager,同时WindowManager也是一个接口,那么就应该是WindowManager.LayoutParams的type有误
果不其然,在查阅资料后发现,我使用的是
mLayoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
这个是Android8.0新出的一个特性,因为Android8.0以后,使用SYSTEM_ALERT_WINDOW 权限的应用无法再使用以下窗口类型来在其他应用和系统窗口上方显示提醒窗口:
TYPE_PHONE
TYPE_PRIORITY_PHONE
TYPE_SYSTEM_ALERT
TYPE_SYSTEM_OVERLAY
TYPE_SYSTEM_ERROR
在Android8.0以下我使用的是
mLayoutParams.type = WindowManager.LayoutParams.TYPE_PHONE
正是这个地方出了错误,因为一个在Android6.0以上被谷歌官方淘汰的一个type,但是其在Android5.0依然有效,且不会崩溃,那就是
mLayoutParams.type = WindowManager.LayoutParams.TYPE_TOAST
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69917874/viewspace-2743758/ ,如需转载,请注明出处,否则将追究法律责任。