在LocationRequest中将优先级设置为PRIORITY_HIGH_ACCURACY会使GPS无限期地保持打开状态

时间:2016-01-27 10:43:56

标签: android gps android-location google-api-client

我使用background-image:url("/img/example.png"); background-repeat: no-repeat; background-color: #FFFFFF; 内每隔30秒跟踪用户位置,我想要准确的位置点,因为我的应用取决于它所以我使用了{{1但是,此设置会在GoogleApiClient的整个持续时间内保持GPS状态,只有在我明确调用Service后,GPS图标才会消失。

我想做以下事情;在PRIORITY_HIGH_ACCURACY回调获取位置并将其发送到服务器并让GPS进入睡眠状态,直到接下来的30秒(我想我可以在此期间节省一些电量)但我看不出任何办法这是合理的,因为Service类中没有提供回调。

我在这里遗漏了什么,或者这是这个API的设计方式?

2 个答案:

答案 0 :(得分:1)

  

此设置会在我的服务的整个持续时间内保持GPS开启,GPS图标仅在我明确调用removeLocationUpdates后消失。

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

  

我想我可以在此期间节省一些电池

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

请注意,Play服务会考虑加速度计。因此,如果设备单独放置一段时间,您看到的行为可能会发生变化。

另请注意,Play服务正在处理来自许多应用的位置请求,而不仅仅是您的应用。也许Google的一些决策是基于其他应用程序的其他请求,以及其他优先级(例如PRIORITY_NO_POWER)。

  

这就是这个API的设计方式吗?

是。

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

答案 1 :(得分:1)

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

所以你的30s开/关最有可能消耗更多的电池而不是一直留在电池上。

如果您可以控制您的应用程序,它始终是一个优势,因此请三思而后行,是否需要Google Play服务来获取位置 不要忘记,如果有其他应用程序运行并访问GPS芯片,OP系统不会关闭芯片。

如果您不确定哪种开关有意义,请测量它: 你的应用程序可以在启用GPS的情况下运行多少小时(我的8小时开机)以及有多少小时开启和关闭30秒。 随后可以将结果作为自我答案发布。