【发布时间】:2013-06-17 03:05:27
【问题描述】:
我正在考虑设置两个单独的警报来每小时收集用户的位置数据,一个每 59 分钟触发一次以“连接”客户端,另一个用于实际获取位置,然后断开客户端。
在电池寿命方面,如果获取用户的位置将成为应用程序的主要消耗,我还应该考虑做些什么吗?或者,是否有不同的方法来设置两个警报?我最初只有一个警报,但是执行 (!mLocationClient.isConnected) 然后进行连接检查并没有给客户端足够的时间来连接。
感谢您的洞察力。
两个警报会像这样响起:
private int PERIODIC_UPDATE = 60000*60; //gets location and disconnects every hour
private int PERIODIC_RECONNECTION_UPDATE = 60000*59; //connects 1 minute before getLocation call
Timer toReconnect = new Timer();
toReconnect.schedule(new TimerTask() {
@Override
public void run() {
mLocationClient.connect();
}
}, 5000, PERIODIC_RECONNECTION_UPDATE);
Timer theTimer = new Timer();
theTimer.schedule(new TimerTask(){
@Override
public void run() {
try {
if(!mLocationClient.isConnected()) {
mLocationClient.connect();
//This will not have much affect because cannot so quickly, will remove.
}
Location theLocation = mLocationClient.getLastLocation();
if(theLocation!=null) {
checkPostLocation(theLocation);
mLocationClient.disconnect();
}
} catch (Exception e) {
e.printStackTrace();
}
}}, 5000, PERIODIC_UPDATE);
【问题讨论】:
-
最省电的方法是禁用所有 Messenger 应用程序,并关闭显示。然后您可以每秒记录一次 GPS 超过 8 小时。
-
@jsc123 请注意,将 Fused Location Provider 与“getLastLocation()”一起使用并不能保证 GPS 位置 - 您可能会获得主要基于传感器、WiFi 或蜂窝连接的位置。此外,您不一定要强制使用新位置,因此如果没有其他应用(包括 Google 服务)请求更新位置,您可能会获得与上次相同的位置。
-
@SeanBarbeau,如果我总是试图定期获取最准确的位置,即使它是一个更大的消耗,我的实现不是最好的吗?
-
“最佳”是非常主观的,具体取决于您的应用程序的用途 - 您确实需要弄清楚您想要跟踪用户的确切原因以及合适的准确度和能量消耗。然后,将其与我在融合位置提供者的答案中列出的优先级相匹配。
标签: android timer geolocation google-play-services