Изключете 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
Хей 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