背景: 在我们的跑步功能中,有很多因为手机权限问题导致跑步出现轨迹断开,定位不准确,步数不准确,甚至应用被杀等情况。这些问题前期因为使用范围不够广所以问题没有暴露出来,然后上线之后开始大量使用就遇到了,以下是11期跑步收到反馈的问题:
可以看到,出现这些情况的原因有80%是由于手机系统的限制导致的,Android 不像iOS一样快捷,每次授权都是一大堆,在跑步的流程中,我们的产品也没有做好这些权限的提示,导致了很多人不会去设置这些权限。最终出现非常的这样的问题。所以,为了保障跑步功能的稳定,第一步是要处理权限问题。
1、定位授权
判断 GPS是否开启
,这一步是地图展示和定位必须要的。不打开gps对于户外跑步来说,相当于白跑。
2、通知栏授权
判断 isNotificationEnable
通知栏权限是否开启 ,这一步也是必要的。因为在跑步过程中,需要开启一个service
服务,用于一直运行计时器和记录跑步轨迹等等,而这个 service
优先级最高的是前台可见服务,所以开启 startForeground
的参数必须带一个 Notification
,这也是为什么一定要通知栏权限的原因,基本上所有的应用为了能更好的长时间运行程序而保证不被杀,都需要开启这个服务。
3、省电模式
省电模式开启后,不是系统或者白名单的应用,在息屏,或者不可见的情况下,极易被系统回收,这就导致跑步断开的问题。
a.关于电池,在android 中还有个忽略电池优化的 设置 isIgnoringBatteryOptimizations
,设置这个也可以提高存活率
b.powerSaveMode
判断是否开启了省电模式
在不同的手机厂商和Android 系统版本中,这个判断不是很准确,但是我们可以通过adb 找到手机管家或者电池设置页面,引导用户去设置。
例如:对于 huawei手机
,打开手机管家是这样的:
而
realme 手机
是这样的:
可以通过adb 查找对应的页面:
//查看当前App所处的界面包名
adb shell dumpsys window | findstr mCurrentFocus
4、健身运动权限
Manifest.permission.ACTIVITY_RECOGNITION
健身运动权限是为了获取系统运动相关的数据,例如:摆幅,陀螺仪等等。可以通过算法,计算出步数。
可以查看 跑步-计步器实现(一) 跑步-计步器实现(二)
另外,需要说的是,如果跑步出现步数0,要么是权限没打开,要么是坐车划水了。。。
5、后台定位权限
这个权限是为了保证息屏跑步时,能获取实时得定位信息,如果不授权,部分手机会出现估计不准确的问题。
以上是跑步开始时,权限提示和获取的过程。 如果不授权,会相应的提示两次。走完这个权限流程,才是正式进入跑步,不给权限将无法开启跑步,这个可以很大程度避免跑步中的各种问题。
6、其他权限
a.自启动权限
b.悬浮窗