我有一个开源gps跟踪应用程序已经存在很多年了。最近,我收到投诉,在Android牛轧糖,而不是每分钟更新一次,当电话拔掉电话时,人们每隔<5分钟就会通过手机获取更新
即使我们尝试将其关闭,节电模式也会发生一些变化。
有没有办法强制手机在拔掉电源后的指定时间获取gps更新?
以下是代码,如果有人想看到它,但我不认为这是代码的问题。多年来它一直很稳定。
感谢。
答案 0 :(得分:1)
Android 7 / Nougat的一个变化是Doze现在“更具侵略性”。在Android 6 / Marshmallow中,当屏幕关闭时,打盹模式启动,设备使用电池运行并且静止不动。
(这在Optimizing for Doze and App Standby中记录)
现在在Android 7中,条件只是屏幕关闭并在电池上运行。
(这在Android 7.0 Behavior Changes中记录)
如果应用程序破坏了核心功能,则可以将其列入白名单,以免受限制。在你的情况下,他们这样做,因为GPS跟踪器需要实时记录坐标。
有一个Acceptable Use Cases for Whitelisting
列表这包括:
任务自动化应用程序| App的核心功能是自动调度 动作,例如即时消息,语音呼叫,新照片 管理,或位置操作。
用户可以在设备设置中自行手动白名单应用,也可以由应用请求白名单,并由用户批准或拒绝。
中介绍了这一点引用:
应用可以触发ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS意图 将用户直接带到电池优化,他们可以在那里 添加应用。
持有REQUEST_IGNORE_BATTERY_OPTIMIZATIONS权限的应用可以 触发系统对话框,让用户将应用程序添加到白名单 直接,无需进行设置。该应用程序触发了一个 ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS意图触发 对话框。
用户可以根据需要手动从白名单中删除应用。
最后一点当然很重要,但幸运的是,可以通过编程方式检查白名单状态:
应用可以检查当前是否在免除白名单中 调用isIgnoringBatteryOptimizations()。
因此,处理打盹模式至少要研究一件事。
另一个问题是保持服务一般运行。但服务被系统杀死可能会导致更多的随机时间间隔。当然有using START_STICKY或running as a foreground service等经典内容。