Desidero ricevere una notifica quando l'utente abilita o disabilita le posizioni di rete o GPS e, soprattutto, desidero sapere quale è stata modificata e come. Ho un destinatario di trasmissione per l'intento di trasmissione android.location.PROVIDERS_CHANGED
e questo sta ricevendo la trasmissione corretta.È possibile ricevere una notifica quando un provider di posizione è abilitato/disabilitato e verificare quale azione si è verificata?
Ora devo provare e determinare quale azione si è verificata, ovvero abilitare o disabilitare e quale provider è stato modificato. So che potrei mantenere lo stato di ciascun provider e poi quando riceverò la notifica che sono cambiati, allora potrei capire cosa è cambiato, sto cercando un metodo più "standard" per farlo. L'intento di trasmissione non sembra avere alcun extra per indicare quale provider è cambiato.
Questo è il codice che ho attualmente.
public class LocationProviderChangedReceiver extends BroadcastReceiver {
private final static String TAG = "LocationProviderChangedReceiver";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().matches("android.location.PROVIDERS_CHANGED"))
{
Log.i(TAG,"Location Providers changed");
Bundle bundle = intent.getExtras();
if (bundle == null) {
Log.d(TAG, "No extras data");
} else {
Log.d(TAG, "Bundle received of size " + bundle.size);
}
}
}
}
e questo è un piccolo estratto dal mio manifesto
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<receiver
android:name=".LocationProviderChangedReceiver"
android:exported="false">
<intent-filter>
<action android:name="android.location.PROVIDERS_CHANGED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
questo sarebbe perfetto se ci fosse un extra all'interno del Broadcast che ha dichiarato che aveva cambiato fornitore e se è stato attivato o disattivato. Purtroppo questo non è il caso. Qualcuno è a conoscenza di qualsiasi meccanismo attraverso il quale posso determinare quale stato è cambiato senza mantenere le mie variabili di stato.
In un mondo ideale, vorrei monitorare costantemente i cambiamenti ma solo occasionalmente ascoltare i cambiamenti di posizione. Vorrei evitare di monitorare costantemente i cambiamenti di posizione.
Spiacente di cambiare la domanda e i requisiti dopo aver risposto, ma stavo cercando un modo per monitorare questo senza ascoltare le posizioni. Richiedo aggiornamenti di posizione in vari punti ma volevo monitorare costantemente le modifiche ai provider senza dover costantemente ascoltare le posizioni. –
Ok, in questo caso anche il 'LocationManager' potrebbe essere d'aiuto. Ho aggiornato la mia risposta. – saschoar