Отключить значок GPS, когда LocationListener спит

Я немного борюсь с LocationListener в Android. Я хочу сделать приложение, которое будет получать текущее местоположение GPS, а затем долго спать. День или больше. В этот период времени я хочу, чтобы значок уведомления GPS не отображался.

То, что у меня есть сейчас, находится в onLocationChanged Thread.sleep(x), но это сохранит значок в период сна. Как я могу это сделать, и есть ли лучший подход, чем использовать Thread.sleep?

заранее спасибо


person Andreas    schedule 26.07.2010    source источник


Ответы (2)


Для этого вам нужно полностью отключить LocationManager. Я сделал это в своем приложении, где я проверяю местоположение только каждые 10 секунд, потому что я обнаружил, что отключение экономит немного больше энергии батареи, чем min_distance или min_time LocationManager.

Что-то типа:

// Turning off
mLocationManager.removeUpdates(gpsListener);
mLocationManager = null;

// Turning on again
mLocationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);            
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, GPS_MINTIME, GPS_MINDISTANCE, gpsListener);

Значок исчезнет до тех пор, пока LocationManager снова не будет включен.

person Keenora Fluffball    schedule 30.07.2010
comment
Hey Fluffball Да, я, наконец, понял это, сделал это именно так, как вы описываете. Я также узнал, что Thread.sleep — это плохо. Прочтите о классе Handler и о том, как откладывать задачи. Это оказалось ужасно, так как я закончил с рекурсивными функциями. И так как у меня переменная задержка, я не мог использовать метод повтора. Я, наконец, застрял с менеджером тревог, и он работает как шарм. Спасибо за ответ :) - person Andreas; 31.07.2010

Если у вас есть оверлеи, подумайте также об отключении местоположения на них:

@Override
protected void onResume()
{
    Log.i("ProjetTEA", "onResumeMain");
    if (mLocationListener != null)
    {
        mLocationOverlay.enableMyLocation();
        mLocationManager = (LocationManager) getApplicationContext().getSystemService(LOCATION_SERVICE);
        mLocationManager.requestLocationUpdates(mBestProvider, 10000, 2, mLocationListener);
    }
    super.onResume();
}

@Override
protected void onPause()
{
    Log.i("ProjetTEA", "onPauseMain");
    mLocationOverlay.disableMyLocation();
    mLocationManager.removeUpdates(mLocationListener);
    mLocationManager = null;
    super.onPause();
}
person Bourbon    schedule 13.01.2012