Android LocationListener не останавливает использование GPS

В моем service в некоторых сценариях я не могу остановить поиск GPS и разрядку аккумулятора устройства.

LocationListenerAgent.java

@Override
public void onCreate() {
    thisContext = this;
    // Register ourselves for location updates

    networkListener = new LocationListenerAgent();
    gpsListener = new LocationListenerAgent();

    lmgrNet = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
    lmgrGps = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
    gps_enabled = lmgrGps.isProviderEnabled(LocationManager.GPS_PROVIDER);
    lmgrNet.requestLocationUpdates("network", ONE_MINUTE, 10, networkListener);
    lmgrGps.requestLocationUpdates("gps", ONE_MINUTE, 10, gpsListener);

    super.onCreate();
}

@Override
public void onDestroy() {
    super.onDestroy();
    // Unregister listener
    lmgrNet.removeUpdates(this);
    lmgrNet = null;
    lmgrGps.removeUpdates(this);
    lmgrGps = null;
}

В некоторых местах моего приложения, когда я нажимаю «назад» в основном действии, которое уничтожает приложение, это называется:

@Override
protected void onStop() {
    if (mBound) {
        unbindService(mConnection); //this is a callback to the locationlisteneragent class to bind it to a service
        mBound = false;
    }
    super.onStop();
}
@Override
protected void onDestroy() {

    if (mBound) {
        unbindService(mConnection);
        mBound = false;
    }
    stopService(new Intent(this, LocationListenerAgent.class));
    super.onDestroy();
}

возможно, мои методы жизненного цикла super.On должны быть перед кодом с методом.

Что еще мне нужно сделать, чтобы остановить GPS??? Я видел, что у других людей были проблемы с этим, и ответы не кажутся такими уж абсолютными.

В других сценариях в моем приложении GPS останавливается.


person CQM    schedule 21.11.2012    source источник


Ответы (3)


Я решил свою проблему. Я знаю, что не упомянул представление карты в исходном сообщении, но если вы также используете MapView, решение состоит в том, что представление карты может использовать службу GPS, не связанную с вашей собственной службой прослушивания местоположения GPS.

В вашем представлении карты

private MyLocationOverlay currLocationOverlay;

@Override
protected void onStop() {
    if(currLocationOverlay!=null)
        currLocationOverlay.disableMyLocation();
    super.onStop();
}
@Override
protected void onDestroy() {
    if(currLocationOverlay!=null)
        currLocationOverlay.disableMyLocation();
    stopService(new Intent(this, LocationListenerAgent.class));
    super.onDestroy();
}
person CQM    schedule 21.11.2012

Основываясь на опубликованном вами коде, я думаю, что вы не удаляете обновления местоположения.

В вашем методе onDestroy() это должно быть:

lmgrNet.removeUpdates(networkListener);
lmgrNet.removeUpdates(gpsListener);
person tlau    schedule 21.11.2012
comment
Я удаляю обновления местоположения, посмотрите еще раз. Но я разобрался, спасибо. - person CQM; 21.11.2012
comment
Моя вина. Если LocationListenerAgent — это ваша служба, почему вы создаете 2 дополнительных объекта для слушателей вместо использования this? Также я думаю, что вам не нужны 2 разных LocationManagers для разных провайдеров. - person tlau; 21.11.2012
comment
Я пробовал оба способа. На самом деле я разделил слушателей, потому что в другом ответе на этом сайте говорилось, что removeUpdates не удаляет всех слушателей, и решение этой проблемы будет заключаться в том, чтобы поместить провайдеров в разных менеджеров местоположений, я надеюсь, что это имеет смысл, но вы можете видеть, что я сделал в моем код - person CQM; 21.11.2012

Вы также можете остановить вот так

stopService (новое намерение (AlertsActivity.this, PollingService.class)); android.os.Process.killProcess(android.os.Process.myPid());

person aNiKeT    schedule 19.12.2013