繁体   English   中英

在LocationRequest中将优先级设置为PRIORITY_HIGH_ACCURACY可以使GPS无限期开启

[英]Setting priority as PRIORITY_HIGH_ACCURACY in the LocationRequest keeps GPS on indefinitely

我正在使用GoogleApiClient跟踪Service每30秒的用户位置,我想获取准确的位置点,因为我的应用程序依赖它,因此我使用PRIORITY_HIGH_ACCURACY ,但是此设置可在我的Service的整个过程中保持GPS开启,仅GPS图标我显式调用removeLocationUpdates之后removeLocationUpdates

我要执行以下操作; onLocationChanged回调中,获取位置并将其发送到服务器,然后使GPS进入睡眠状态,直到接下来的30秒为止(我认为我可能可以在此期间节省一些电量),但是我看不到任何合理的方法方式,因为LocationRequest类中没有提供回调。

我在这里缺少什么吗?或者这是API的设计方式吗?

此设置可在我的服务的整个过程中保持GPS处于打开状态,只有在我明确调用removeLocationUpdates之后,GPS图标才会消失。

这种行为取决于Play服务的实施者。

我认为在此期间我也许可以节省一些电池

负责Play服务这一部分的Google工程师显然不同意。 例如,GPS等待接收卫星信号时需要一段时间才能开始接收定位。 也许Google工程师认为,对于setInterval(30000) (我的解释是“每30秒”),释放GPS无线电并重新获取它是没有意义的。

请注意,Play Services考虑了加速度计。 因此,如果将设备放置一会儿,您看到的行为可能会改变。

另请注意,Play服务正在处理来自许多应用程序的定位请求,而不仅仅是您的应用程序。 谷歌的某些决策可能是基于来自其他应用的其他请求,并具有其他优先级(例如PRIORITY_NO_POWER )。

这是API的设计方式吗?

是。

如果您不喜欢Google的决策,请随时使用LocationManager代替Play Services。

Api设计正确,在如此短的30s内关闭和打开GPS信号是没有意义的。
GPS芯片需要最大的处理能力来计算初始位置。 (这就是为什么有些残废的Android手机无法在没有互联网连接的情况下无法获得初始位置的原因。这些手机具有特殊残废的GPS芯片,无法计算初始位置)。

因此,您的30秒开/关很可能会消耗更多的电量,而不是始终保持开机状态。

如果您可以控制自己的应用,这总是一个优势,因此请三思而后行是否需要Google Play服务来获取位置。
并且不要忘记,如果还有其他App正在运行并正在访问GPS芯片,则OP系统不会关闭该芯片。

如果不确定哪个开关间隔有意义,请对其进行测量:在启用GPS的情况下,您的应用始终可以运行多少小时(在iOS 8h上为我),以及在30秒内打开和关闭多少时间。 以后随时将结果发布为自我回答。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM