突破MIUI8权限显示悬浮球
首先声明一下,并不能越过MIUI8的悬浮球权限在桌面上显示悬浮球,但是可以在应用内显示悬浮球。
本文内容是在以下项目的基础上修改的:
继越过权限显示悬浮球https://github.com/pengjianbo/FloatViewFinal (不能越过MIUI8的权限)
尝试过发现,将悬浮球的WindowManager.LayoutParams 的type属性设置成TYPE_APPLICATION即可。
直接改的话在addView()的时候会出现如下错误:
原因是TYPE_APPLICAI的窗口依附的Context必须有一个token。
而service的token值是null。同样,也不能直接依附Appplication的Context
Activity和Service以及Application的Context是不一样的,Activity继承自ContextThemeWraper.其他的继承自ContextWrapper.
Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
at android.view.ViewRootImpl.setView(ViewRootImpl.java:583)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:313)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:86)
at com.ct108.open.thm.floatview.FloatView.init(FloatView.java:198)
at com.ct108.open.thm.floatview.FloatView.<init>(FloatView.java:149)
……</span>
解决办法是让它依赖于指定的Activity。
这样做的代价是悬浮球必须跟着每个需要显示它的Activity的生命周期走。需要在每个Activity的生命周期中做处理。
比如,Bugtags的悬浮球就是这么实现的。
前段时间太忙了,现已将demo补上:
https://github.com/HangminTian/FloatView
还没有评论,来说两句吧...