it-swarm.com.de

Wie es funktioniert - requestLocationUpdates () + LocationRequest / Listener

Ich bin ein neuer Android Codierer und ich habe ein Problem damit, Updates für meine Lokalisierung anzufordern.

Ich arbeite mit Tutorials von http://developer.Android.com/training/location/receive-location-updates.html .

Meine Anwendung kann Ausnahmen verarbeiten und Längen- und Breitengrade korrekt ermitteln, und Geocoder kann die Anzeige der Adresse verarbeiten. Aber ich frage nur einmal nach dem Standort - oder wenn sich der Standort ändert. Ich würde gerne Zeitintervalle machen. Im Moment habe ich angefangen, Code aus den Tutorials zu implementieren und es sieht so aus:

public class MainActivity extends Activity implements 
GooglePlayServicesClient.ConnectionCallbacks,
GooglePlayServicesClient.OnConnectionFailedListener,
LocationListener {

private static final int MILLISECONDS_PER_SECOND = 1000;

public static final int UPDATE_INTERVAL_IN_SECONDS = 5;
private static final long UPDATE_INTERVAL =
          MILLISECONDS_PER_SECOND * UPDATE_INTERVAL_IN_SECONDS;

private static final int FASTEST_INTERVAL_IN_SECONDS = 1;
private static final long FASTEST_INTERVAL =
          MILLISECONDS_PER_SECOND * FASTEST_INTERVAL_IN_SECONDS;

private TextView tvStatus;
private TextView tvLatitude;
private TextView tvLongitude;

LocationRequest mLocationRequest;
LocationClient mLocationClient;
Location mCurrentLocation;

boolean bNetworkEnabled;
boolean bGPSEnabled;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
    tvStatus = (TextView)findViewById(R.id.tvStatus);
    tvLatitude = (TextView)findViewById(R.id.tvLatitude);
    tvLongitude = (TextView)findViewById(R.id.tvLongitude);

    mLocationRequest = LocationRequest.create();
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    mLocationRequest.setInterval(UPDATE_INTERVAL);
    mLocationRequest.setFastestInterval(FASTEST_INTERVAL);
    mLocationClient = new LocationClient(this, this, this);

    checkProviders();
}

Es sind also bereits Intervalle implementiert und Standortabfragen. Aber in dem Link, den ich vorher gegeben habe, gibt es einen Kommentar, den ich irgendwo verwenden sollte requestLocationUpdates() (wahrscheinlich onCreate(), onStart() und das Entfernen der Anfrage auf onStop()), aber ich habe ein Problem damit. Also zeigt mir Eclipse 3 Methoden:

requestLocationUpdates(LocationRequest request, LocationListener listener)
requestLocationUpdates(LocationRequest request, PendingIntent CallbackIntent)
requestLocationUpdates(LocationRequest request, LocationListener listener, Looper looper)

Also der erste, den ich für richtig halte, ist an diesem Ort. Was soll ich in den LocationListener Slot legen? Ich bitte um Hilfe mit wenig Erklärung, wie es funktioniert.

34
F1sher

Sie implementieren LocationListener in Ihrer Aktivität MainActivity. Der Aufruf für gleichzeitige Standortaktualisierungen sieht daher folgendermaßen aus:

mLocationClient.requestLocationUpdates(mLocationRequest, this);

Stellen Sie sicher, dass der von Ihnen implementierte LocationListener von der Google API stammt.

import com.google.Android.gms.location.LocationListener;

und nicht das:

import Android.location.LocationListener;

und es sollte gut funktionieren.

Es ist auch wichtig, dass der LocationClient wirklich verbunden ist, bevor Sie dies tun. Ich schlage vor, Sie rufen es nicht in der onCreate- oder der onStart-Methode auf, sondern in onResume. Dies alles wird im Tutorial für Google Location Api recht gut erklärt: https://developer.Android.com/training/location/index.html

36
HigiPha

Ich benutze diesen:

LocationManager.requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener)

Zum Beispiel mit einem 1s Intervall:

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000,0,this);

die Zeit ist in Millisekunden, die Entfernung in Metern.

Dies ruft automatisch auf:

public void onLocationChanged(Location location) {
    //Code here, location.getAccuracy(), location.getLongitude() etc...
}

Ich hatte auch diese im Skript enthalten, aber benutzte sie nicht wirklich:

public void onStatusChanged(String provider, int status, Bundle extras) {}
public void onProviderEnabled(String provider) {}
public void onProviderDisabled(String provider) {}

Zusamenfassend:

public class GPSClass implements LocationListener {

    public void onLocationChanged(Location location) {
        // Called when a new location is found by the network location provider.
        Log.i("Message: ","Location changed, " + location.getAccuracy() + " , " + location.getLatitude()+ "," + location.getLongitude());
    }

    public void onStatusChanged(String provider, int status, Bundle extras) {}
    public void onProviderEnabled(String provider) {}
    public void onProviderDisabled(String provider) {}

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000,0,this);
    }
}
10
Josttie