一年多以前的帖子表明,有必要使用WakeLock来保留CPU来收集位置信息(特别是在CommonsWare上Android Periodic GPS location updates with AlarmManager inside a Service)。但是,我不明白为什么我不能简单地每28分钟调用一次服务,连接LocationClient,将计时器设置为等待2分钟,然后获取最新的位置,断开客户端连接,然后停止服务。
由于Commonsware和在此处派生示例的用户(https://github.com/alexbirkett/cwac-locpoll/blob/master/src/com/commonsware/cwac/locpoll/LocationPollerService.java)使用的是LocationListener,而不是LocationClient,所以我想知道他的答案是否仍然适用。
谢谢你的时间!
编辑:很简单吗,其中AlarmManager每28分钟调用一次服务>该服务获取一个WakeLock,并且由于LocationClient连接而使计时器经过了两分钟>一旦过了两分钟,我就可以终止该服务并释放WakeLock?
它看起来像这样:
PowerManager pm = (PowerManager) getBaseContext().getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "");
wl.acquire();
Timer theTimer = new Timer();
theTimer.schedule(new TimerTask() {
@Override
public void run() {
if(checkIfGooglePlay()) {
getPostLocation();
w1.release();
stopSelf();
}
}
}, TWO_MINUTES);
return Service.START_NOT_STICKY;
最佳答案
您可能可以轮询LocationClient
。但是,您仍将需要WakeLock
,否则设备将在这两分钟内进入睡眠状态,否则,“每28分钟”部分仍将需要AlarmManager
,并且我不知道LocationClient
是否会施加其他要求。