我使用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的设计方式?
答案 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秒。 随后可以将结果作为自我答案发布。