突破MIUI8权限显示悬浮球

来源:互联网 发布:听书软件 编辑:程序博客网 时间:2024/04/28 02:43

首先声明一下,并不能越过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

0 0
原创粉丝点击