ITPub博客

首页 > 移动开发 > ANDROID > Android悬浮框的适配问题

Android悬浮框的适配问题

原创 ANDROID 作者:山有木xi 时间:2020-12-20 14:45:05 1 删除 编辑

近日在写代码时,发现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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle OCA(Java),IBM高级工程师认证,中国软件行业人才(高级c语言),高级Android工程师,对数据库并发与性能调优也有一定了解

注册时间:2019-04-25

  • 博文量
    147
  • 访问量
    390773