2016-03-30 1 views
0

Je fais une application qui réduit la sonnerie de l'utilisateur en fonction de leur emplacement. J'ai un service qui fonctionne en arrière-plan, et j'en ai besoin pour obtenir l'emplacement de l'utilisateur toutes les quelques secondes. J'utilise LocationListener, j'ai donc essayé de mettre onLocationChanged dans la méthode onStart de mon service, mais je n'étais pas autorisé. Donc, je me demande si j'ai utilisé un gestionnaire pour demander l'emplacement de l'utilisateur toutes les 5 secondes, si cela viderait leur batterie. Je fais cela parce que je ne peux pas tester l'application en se déplaçant, donc je ne suis pas sûr si onLocationChanged est appelé.Videra-t-il la batterie du téléphone si j'utilise un gestionnaire pour demander l'emplacement toutes les quelques secondes?

public class myService extends Service implements LocationListener { 
Double lat; 
Double lng; 

@Override 
public IBinder onBind(Intent arg0) { 
    return null; 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    // Let it continue running until it is stopped. 
    Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show(); 





    return START_STICKY; 

} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show(); 

} 



@Override 
public void onLocationChanged(Location location) { 

    if (MainActivity.location != null) { 


     lat = MainActivity.location.getLatitude(); 

     lng = MainActivity.location.getLongitude(); 


     if (MainActivity.placeArrayList.size() != 0) { 
      for (int i = 0; i < MainActivity.placeArrayList.size(); i++) { 


       Log.e("hello", String.valueOf(Float.parseFloat(MainActivity.latitudeArrayList.get(i)))); 

       MainActivity.destination.setLatitude(Double.parseDouble(MainActivity.latitudeArrayList.get(i))); 
       MainActivity.destination.setLongitude(Double.parseDouble(MainActivity.longitudeArrayList.get(i))); 
       Log.e("distancemeters", String.valueOf(MainActivity.location.distanceTo(MainActivity.destination))); 

       if (MainActivity.location.distanceTo(MainActivity.destination)<100) { 




        AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 

        audioManager.setStreamVolume(AudioManager.STREAM_RING, AudioManager.RINGER_MODE_SILENT, AudioManager.FLAG_SHOW_UI); 


       } else { 



       } 

      } 


     } 
    } 

} 

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 

} 

@Override 
public void onProviderEnabled(String provider) { 

} 

@Override 
public void onProviderDisabled(String provider) { 

} 
} 
+0

La demande d'emplacement toutes les quelques secondes va définitivement vider votre batterie si vous n'utilisez pas le mode Battery_Saving. En outre, si le téléphone ne bouge pas, pourquoi avez-vous besoin de l'appeler toutes les quelques secondes? – Dus

+0

@HadasM parce que je ne sais pas comment obtenir continuellement l'emplacement - je ne trouve pas comment appeler onLocationChanged dans le service – felix

Répondre

-1

Ce n'est pas la façon dont vous devriez obtenir l'emplacement de l'utilisateur. Essayez comme this. Si vous voulez tester votre fonction, utilisez Android Emulator + Android Device Monitor. Là, vous pouvez définir et modifier l'emplacement de l'utilisateur.