Ho un'app che ottiene una correzione della posizione. L'app deve essere distribuita ai telefoni da Gingerbread up. Una volta che l'app ottiene una posizione, viene visualizzato un messaggio di brindisi per l'utente. Il problema è quando l'utente passa alla prossima attività, il messaggio di toast appare forse altre dieci volte.android locationManager continua a chiamare onLocationChanged dopo removeUpdates
Penso di aver implementato il ciclo di vita in modo corretto ad esempio
1) ottenere un manager in posizione onCreate() 2) creare e passare una posizione ascoltatore al gestore in onResume() 3) rimuovere gli aggiornamenti in onStop()
ho capito che posso aggirare questo problema in Android> 4.x chiamando
mlocManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, mlocListener, null);
ma devo accogliere Gingerbread quindi chiamare una singola richiesta non è in api 2.3.x. Funziona bene su Android 4, ma su Gingerbread il metodo onLocationChanged continua ad eseguirne altre 10 volte.
Come posso forzare l'esecuzione del metodo onLocationChanged una sola volta sul pan di zenzero?
grazie.
[modifica] Ho notato che quando mi muovo per la prossima attività del metodo onlocationchanged mantiene l'esecuzione, ma se mi trasferisco in un ulteriore attività allora le richieste di posizione vengono rimossi con successo
@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);
questo collegamento potrebbe aiutare. controlla la prima risposta. http://stackoverflow.com/questions/3449676/locationmanager-calling-onlocationchanged-too-often –