Android location updates in einem Service
Möchte ich etwas wie das hier tun:
-
Wenn meine Anwendung gestartet wird möchte ich einen Dienst starten, der sollte überprüfen, meine Lage
-
Wenn die Anwendung geht in den hintergrund ich möchte, um den Dienst zu beenden
Habe ich zwei große Probleme:
-
Wie kann ich erkennen, dass mein Antrag geht in den hintergrund? Ich haver mehrere Aktivitäten, und ich habe versucht, in meiner MainActivity überschreiben onPause, aber der onPause wird auch aufgerufen, wenn ich starten Sie eine andere Tätigkeit.
-
Dieses problem ist wichtiger: Wie sollte ich meinen Dienst, welche Prüfungen für meine Lage Aussehen? Ich habe versucht, mehrere Ansätze, aber kein Erfolg.
Mein Service sieht so aus und es funktioniert nicht. Was sollte ich ändern damit es funktioniert?
package com.pivoscore.service;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
public class LocationService extends Service {
private LocationListener locationListener;
@Override
public IBinder onBind(final Intent intent) {
return null;
}
@Override
public int onStartCommand(final Intent intent, final int flags, final int startId) {
super.onStartCommand(intent, flags, startId);
return Service.START_STICKY;
}
@Override
public void onCreate() {
super.onCreate();
final LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
this.locationListener = new MyLocationListener();
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 100, 0, this.locationListener);
}
private static class MyLocationListener implements LocationListener {
@Override
public void onLocationChanged(final Location location) {
}
@Override
public void onProviderDisabled(final String provider) {
}
@Override
public void onProviderEnabled(final String provider) {
}
@Override
public void onStatusChanged(final String provider, final int status, final Bundle extras) {
}
}
}
- onResume () - Methode, lassen Sie den Dienst suchen Informationen zum Standort und onPause () - Methode entfernen Sie die Lage.
- Ich will meine Position in mehreren Aktivitäten, nicht nur in der Haupt-Aktivität. Also wäre es nicht klug sein, um den Dienst zu beenden in onPause, denn wenn eine andere activity kommt nach vorne, onPause wird aufgerufen, und ich würde halt immer die location updates.
- android.die Genehmigung.ACCESS_COARSE_LOCATION android.die Genehmigung.ACCESS_FINE_LOCATION android.die Genehmigung.ACCESS_NETWORK_STATE haben Sie diese Erlaubnis in Ihrer manifest-Datei ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies Wird Helfen, genau das, was Ihre Anforderung ist
aber vergessen Sie nicht, Fügen Sie die Berechtigung habe ich im Kommentar
und vergessen Sie auch nicht zusätzliche service-tag-in-manifest-Datei
Codestück ist Folgende
<service android:enabled="true" android:name=".LocationService"/>
Anwendung ist nicht eine visuelle Komponente in Android. Es ist unterteilt in Tätigkeiten, die jede von Ihnen ausgeführt werden, wenn sichtbar ist, angehalten und zerstört sonst. Also, es gibt kein Konzept der gesamten Anwendung in den hintergrund, die Aktivitäten sind angehalten und fortgesetzt auf der Grundlage Ihrer individuellen Sicht und völlig unabhängig von anderen Aktivitäten in dieser Angelegenheit.
Ihr Service ist registrieren mit dem Standort-Manager in seiner
onCreate()
, die Registrierung von demselben in seineonDestroy()
. In seineronBind()
es wird wieder einMessenger
Objekt. Und, inonLocationChanged()
es sollte eine Nachricht senden durch den gemeinsamenMessenger
. Keine Notwendigkeit zu verwendenSTART_STICKY
wie Sie nicht möchten, Dienst läuft die ganze Zeit.Den Vorgang (kann jede Aktivität in der App) nur aufrufen muss
bindService()
in seineronStart()
wird Der service gestartet, wenn nicht bereits, und Aktivität, erhalten eineMessenger
aus dem Dienst. Auch, Aktivität nennen sollunbindService()
aus seineronStop()
. Der Dienst wird automatisch beendet, wenn nichts gebunden ist.Wenn Sie benötigen, um Ihre Sachen in Punkt 3 bei Anwendung (Aufgabe) - Ebene, Umsetzung der
Application
- Klasse, und verwenden Sie seineonCreate()
undonTerminate()
. Die Application-Klasse ist nicht angehalten oder gestoppt, wie eine Aktivität.Ich schlage vor, Sie verwenden die neueste location-api von google(auch kompatibel zu version 2.2).
hier ist ein Beispiel zeigt, wie dieser:
https://github.com/chenjishi/android_location_demo
wenn Sie Ihre app ausführen, um hintergrund, können Sie rufen Sie die Verbindung trennen beenden Sie den Standort aktualisieren.
Versuchen, Diesen code.. Durch die Nutzung dieser, können Sie feststellen, ob Ihre Anwendung im Vorder-oder hintergrund. Hoffe, das wird Ihnen helfen.