Autore Topic: Location Manager e batteria  (Letto 653 volte)

Offline rocco_fun90

  • Utente junior
  • **
  • Post: 61
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy s3
  • Sistema operativo:
    Windows xp
Location Manager e batteria
« il: 25 Marzo 2013, 09:50:30 CET »
0
Buongiorno a tutti, sto realizzando una app basata sull'invio delle posizioni.
Alla avvio del sistema operativo faccio partire un service con un pendingIntent
Codice (Java): [Seleziona]
public class BootCompletedReceiver extends BroadcastReceiver
{
     @Override
     public void onReceive(Context context, Intent intent)
     {
            Intent serviceIntent = new Intent(context, InvioPosizioni.class);
                PendingIntent pintent = PendingIntent.getService(context, 0, serviceIntent, 0);
                AlarmManager alarm = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
                // Start every 30 seconds
                Calendar cal= Calendar.getInstance();
                alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 1*1000, pintent);
     }
}

Il servizio si avvia.
La classe InvioPosizioni è un Service. Nel metodo oncreate dopo aver dichiarato un listener per il location manager che invia la location al server se cambia (OnLocationChanged). utilizzo le seguenti triche di codice
Codice (Java): [Seleziona]
                // The minimum time (in miliseconds) the system will wait until checking if the location changed
                int minTime = 60000;
                // The minimum distance (in meters) traveled until you will be notified
                float minDistance = 5;
                // Get the location manager from the system
                LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
               
                //associo a providerId un provider
                if(!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
                {
                        CommonUtilities.providerId=LocationManager.NETWORK_PROVIDER;
                }
                // Request location updates
                Location lastKnownLocation =locationManager.getLastKnownLocation(CommonUtilities.providerId);
                if(lastKnownLocation != null)
                {
                        posizione=updateLocationData(lastKnownLocation);
                }
                locationManager.requestLocationUpdates(CommonUtilities.providerId, minTime, minDistance, myLocationListener);
       
Il problema è che la location me la da ma il consumo di batteria è altissimo.
Come posso risolvere questo problema, considerando che il service deve sempre rimanere attivo ed inviare posizioni al server se cambiano?
Vi ringrazio anticipantamente