android locationManager weiterhin zu nennen onLocationChanged nach removeUpdates

Habe ich eine app, bekommt einen Standort fix. Die app ausgerollt werden, um Handys von Lebkuchen bis. Sobald die app bekommt einen Standort-fix eine toast-Nachricht wird dem Benutzer angezeigt. Das problem ist, wenn der Benutzer bewegt sich auf die nächste Aktivität, die die toast-Nachricht angezeigt, vielleicht zehn mal.

Ich glaube, ich habe implementiert die Lebenszyklen richtig zB

1) Holen Sie sich einen Standort-manager-in onCreate()
2) erstellen und übergeben einen Standort-listener, um die manager in onResume()
3) entfernen Sie updates in onStop()

Ich das verstehe kann ich dieses problem umgehen in Android - > 4.x durch aufrufen

mlocManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, mlocListener, null);

aber ich habe, um Platz für Lebkuchen, so dass das aufrufen einer einzelnen Anforderung ist nicht in der api 2.3.x. Es funktioniert gut auf Android 4, aber auf gingerbread die onLocationChanged-Methode hält die Ausführung noch 10 mal.

Wie kann ich erzwingen, die onLocationChanged-Methode nur einmal ausgeführt werden auf Lebkuchen?

Dank.

[Bearbeiten]
Ich habe bemerkt, dass wenn ich zu bewegen, um die nächste Aktivität, die onlocationchanged-Methode hält die Ausführung, aber wenn ich zu bewegen, um eine weitere Aktivität ist der Standort Anforderungen erfolgreich entfernt

@Override
protected void onStop() {
    mlocManager.removeUpdates(mlocListener); 
    mlocListener = null;
    super.onStop();
}

@Override
protected void onResume() {
    mlocListener = new MyLocationListener();
    if(isCompOptionsReceived == true){
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.GINGERBREAD_MR1) {
            mlocManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, mlocListener, null);
        }else{
            mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mlocListener);   
        }
    }        
    super.onResume();
}

private class MyLocationListener implements LocationListener {

    @Override
    public void onLocationChanged(Location loc) {
        //toast message
    }

    @Override
    public void onProviderDisabled(String provider) {
    }

    @Override
    public void onProviderEnabled(String provider) {
    }

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

}//end of MyLocationListener

@Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    nfcscannerapplication = (NfcScannerApplication) getApplication();
    sIs = savedInstanceState;
    setContentView(R.layout.entryscreen);
    mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
InformationsquelleAutor turtleboy | 2012-12-04
Schreibe einen Kommentar