悬浮球是什么?
所谓的悬浮球或者悬浮窗,就是置于屏幕最上层的一个可操作控件,在本应用处于前台或者后台的时候均可见、可操作。360手机助手、应用宝均有此功能。悬浮球功能多见于提供手机清理、加速功能的应用,因其始终展示在屏幕顶部,方便用户触达,也是增强用户粘性、提升App活跃的不错手段。
实现原理是什么?
悬浮球的实现就是通过WindowManager的addView方法,把一个自定义View添加到Window,关键点在于addView时候给自定义View指定的LayoutParams中的type参数。
其实系统提供了标准类型——LayoutParams.TYPE_SYSTEM_ALERT,用来实现悬浮球功能使用,但是这种类型需要申请权限:android.permission.SYSTEM_ALERT_WINDOW。Android6.0之前还好,因为是静态权限,申请就申请,反正应用安装的时候用户就给授权了,但Android6.0引入了运行时权限,这个权限必须在使用时动态申请,这下就麻烦了。因为产品经理希望用户的操作越简单越好,最好不需要动态申请任何权限就能实现各种功能。
那如何在Android6.0及以后系统上绕开运行时权限实现悬浮球呢?那就是把type参数的值指定为LayoutParams.TYPE_TOAST。这一点网上有很多文章介绍(譬如:点击打开链接),欲了解细节,请自行搜索。其根本就是利用系统源码漏洞,绕开了权限申请。
这样一来,好像问题都解决了&#x