我正在考虑使用两个单独的警报来每小时收集用户的位置数据,一个每隔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);
答案 0 :(得分:3)
请参阅Android开发人员文档中的“接收位置更新”部分,以便使用新的Fused LocationProvider详细讨论此主题:
http://developer.android.com/training/location/receive-location-updates.html
这使您可以选择将LocationListener的Intent注册到Fused LocationProvider,当内部Google Services框架被认为是“高效”时,它会自动触发。我相信这个框架在优化电源使用方面具有更大的潜力,因为它对系统中发生的其他事情以及应用程序注册的计时器有了更多的了解。
以下是注册具有不同电源优先级的侦听器的选项,这将导致不同级别的电池消耗,如上文所述:
答案 1 :(得分:2)
您确实需要跟踪用户吗?
如果它只是关于UI,那么使用getLastKnownLocation(PASSIVE_PROVIDER),假设他们在其他地方的手机上使用了位置服务,你应该得到一些半精确的东西。
如果您需要实际对用户进行三角测量,请意识到不同的提供商使用不同的电池。被动<网络<全球定位系统。
您找到用户的次数越多,GPS使用的电池和时间就越多。
按意图,1小时或其他任何方式启动服务,只需要一项服务。只能活1分钟(或更短),请听所有位置提供商。在分钟或准确度足够好之后,您保存结果并关闭服务。