一年多以前的帖子表明,有必要使用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是否会施加其他要求。

10-05 17:44