我正在考虑设置两个单独的警报,每小时收集用户的位置数据,一个每 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);
有关此主题与新的 Fused LocationProvider 的详细讨论,请参阅 Android 开发人员文档中的“接收位置更新”部分:
http://developer.android.com/training/location/receive-location-updates.html
这使您可以选择将具有 LocationListener 的 Intent 注册到 Fused LocationProvider,当认为这样做“有效”时,内部 Google 服务框架会自动触发该 Intent。我相信这个框架在优化电源使用方面具有更大的潜力,因为与应用程序注册的计时器相比,它对系统中发生的其他事情有更多的了解。
以下是注册具有不同电源优先级的侦听器的选项,这将导致不同级别的电池消耗,如上面文档中所列:
- PRIORITY_BALANCED_POWER_ACCURACY - 与 setPriority(int) 一起使用以请求“块”级精度。块级精度被认为约为 100 米精度。使用这样的粗略精度通常会消耗更少的功率。
- PRIORITY_HIGH_ACCURACY - 与 setPriority(int) 一起使用以请求最准确的可用位置。这将返回可用的最佳位置(以及最大的能量消耗潜力)。
- PRIORITY_NO_POWER - 与 setPriority(int) 一起使用,以在零额外功耗的情况下请求尽可能高的精度。除非不同的客户端请求位置更新,否则不会返回任何位置,在这种情况下,此请求将充当这些位置的被动侦听器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)