2016-03-30 19 views
0

Ich mache eine App, die den Klingelton des Benutzers basierend auf seinem Standort zum Schweigen bringt. Ich habe einen Dienst, der im Hintergrund ausgeführt wird, und ich brauche ihn, um alle paar Sekunden den Standort des Benutzers abzurufen. Ich verwende LocationListener, also habe ich versucht, locationChanged in die onStart-Methode meines Dienstes zu setzen, aber ich durfte nicht. Also, ich frage mich, ob ich einen Handler verwendet, um den Standort des Benutzers alle 5 Sekunden anzufordern, wenn es den Akku entleeren würde. Ich mache das, weil ich die App nicht testen kann, indem ich mich fortbewege, also bin ich mir nicht sicher, ob onLocationChanged aufgerufen wird.Wird die Batterie des Telefons entleert, wenn ich einen Handler verwende, um alle paar Sekunden einen Standort anzufordern?

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

Wenn Sie alle paar Sekunden nach dem Standort fragen, wird der Akku definitiv leer, wenn Sie den Battery_Saving-Modus nicht verwenden. Wenn das Telefon nicht in Bewegung ist, warum müssen Sie es dann alle paar Sekunden anrufen? – Dus

+0

@HadasM weil ich nicht weiß, wie ich sonst den Standort fortwährend bekomme - ich kann nicht finden, wie onLocationChanged im Service anzurufen – felix

Antwort

-1

Dies ist nicht, wie Sie Benutzerstandort erhalten sollten. Versuchen Sie wie this. Wenn Sie Ihre Funktion testen möchten, verwenden Sie Android Emulator + Android Device Monitor. Dort können Sie den Benutzerstandort festlegen und ändern.