【发布时间】:2017-05-19 14:53:30
【问题描述】:
我有一个应用程序,它每 10 秒将位置更新为网络服务。但是,在 API 级别 23 或更高级别的设备上,当打瞌睡模式在 15 分钟后进入不活动状态时,网络连接将丢失,并且应用无法向我的网络服务发送进一步的位置更新。
除了通过请求用户允许忽略电池优化(仅允许每 15 分钟更新一次位置)将应用列入白名单之外,我还有哪些其他选择可以继续获取 GPS 位置更新并能够将它们发送到我的网络服务?
【问题讨论】:
标签: android
我有一个应用程序,它每 10 秒将位置更新为网络服务。但是,在 API 级别 23 或更高级别的设备上,当打瞌睡模式在 15 分钟后进入不活动状态时,网络连接将丢失,并且应用无法向我的网络服务发送进一步的位置更新。
除了通过请求用户允许忽略电池优化(仅允许每 15 分钟更新一次位置)将应用列入白名单之外,我还有哪些其他选择可以继续获取 GPS 位置更新并能够将它们发送到我的网络服务?
【问题讨论】:
标签: android
虽然克服打瞌睡模式是非常不道德的,但如果应用程序可以向用户解释电池问题,那么最好将应用程序列入白名单。
另一个选项是保持屏幕打开以避免触发打盹模式。
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
这段代码将保持屏幕开启。确保创建黑色或空白布局,就像 pokemon go 中的省电模式一样。
官方 Doze 文档允许将您的用例列入白名单。检查它here。
【讨论】:
开始时你跑得太频繁了。没有手机甚至可以快速更新位置 - 正常情况下每 30 到 60 秒更新一次。所以 2/3 到 5/6 的更新毫无意义。忽略这一点——如果你在一辆时速 60 英里的汽车里,你不会在 10 秒内改变超过 14 英尺。你在服务器上做的任何事情都需要精确到 14 英尺——手机中的典型 GPS 只能精确到 10 米(超过 30 英尺)。这就是 GPS 更新不频繁的原因之一。
但不,没有。他们实施 Doze 是有原因的。它可以节省电池。他们对其进行了设置,因此您无法在不询问用户是否要烧掉电池的情况下绕过它。我完全理解为什么 15 分钟太慢了,但是你问用户并让他们决定你的应用是否值得。
【讨论】: