背景
相信大家在开发的过程中肯定会遇到创建悬浮框需要权限的问题,如果不申请权限会出现以下错误:
token null is not valid; is your activity running?
或者类似的错误,这类的文章在百度上面经常可以查看到,但是基本上都是停留在Android6.0以下的,文章比较老旧。随着6.0之后的巨大变化,主要是搞版本之后Google开启了严苛模式,使用户的隐私更加的难获取,对某些敏感手机信息,我们不仅需要在AndroidMainfest.xml配置文件中申请权限,还要在代码中进行动态权限的申请,我们今天讨论的悬浮框权限就是其实的一个,今天我分享的这篇文章最高适配到最新的Android8.0,测试的手机包含了国内外的各大厂商的大部分主流手机。Demo最低适配到api 10,最高适配api27。
##思路
我们都清楚Android碎片的化的严重,但其实也有个大致版本的分割线,为了迎合此文,我们大致把手机大致分为3个区间,其实19,22,16的版本都具有很明显的变换。
- api<19 ,android 4.4以前的
- api>22,api<26, Android4.4与8.0之间的
- api>=26 最新版本的Android手机
##功能
1.唤醒一个悬浮框
2.点击底部虚拟按钮,悬浮框消失不见。
3.监听悬浮框的按钮
技术实现
前提:
- 尽量不在配置文件中申请权限。
- 尽量不在当前APP申请动态权限。
- 如果绕不过去前两者,则引导用户开启权限。
核心代码:
其中最关键的是圈中代码,对type进行的适配。有兴趣的可以下载Demo在研究研究,该篇文章以研究为主。
测试机型
厂商 | 型号 | Android版本号 | 系统 | 配置静态权限 | 动态悬浮框开关 | targetSdkVersion | 交互成功 |
---|---|---|---|---|---|---|---|
SAMSUNG | 三星Nexus | 4.3(18) | 4.3 | 有 | 无 | 无 | Y |
SAMSUNG | 三星Note3 | 5.0(21) | 5.0 | 无 | 无 | 无 | Y |