Ich möchte eine Benachrichtigung erhalten, wenn der Benutzer Netzwerk- oder GPS-Standorte aktiviert oder deaktiviert, und vor allem möchte ich wissen, welche und wie sie geändert haben. Ich habe einen Rundfunkempfänger für die Sendeabsicht android.location.PROVIDERS_CHANGED
und empfängt die richtige Sendung.Ist es möglich, eine Benachrichtigung zu erhalten, wenn ein Standortanbieter aktiviert/deaktiviert ist, und festzustellen, welche Aktion stattgefunden hat?
Ich muss jetzt versuchen zu bestimmen, welche Aktion aufgetreten ist, d. H. Aktivieren oder deaktivieren und welcher Provider wurde geändert. Ich weiß, dass ich den Status jedes Anbieters behalten kann. Wenn ich dann eine Benachrichtigung erhalten habe, dass sie sich geändert haben, dann könnte ich herausfinden, was sich geändert hat. Ich suche nach einer "Standard" -Methode, dies zu tun. Die Übertragungsabsicht scheint keine Extras zu enthalten, um anzuzeigen, welcher Anbieter sich geändert hat.
Dies ist der Code, den ich derzeit habe.
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);
}
}
}
}
Und das ist ein kleiner Auszug aus meinem Manifest
<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>
Das wäre perfekt, wenn es eine zusätzliche innerhalb der Sendung war, die die Provider angegeben hatte sich verändert und ob sie aktiviert oder deaktiviert. Leider ist dies nicht der Fall. Kennt jemand irgendeinen Mechanismus, durch den ich feststellen kann, welcher Zustand sich geändert hat, ohne meine eigenen Zustandsvariablen beizubehalten?
In einer idealen Welt würde ich ständig auf Änderungen überwachen, aber nur gelegentlich auf Standortänderungen hören. Ich möchte vermeiden, ständig auf Standortänderungen zu überwachen.
Sorry, um die Frage zu ändern, und die Anforderungen, nachdem Sie beantwortet haben, aber ich suchte nach einer Möglichkeit, dies zu überwachen, ohne auf Standorte zu hören. Ich ersuche zwar an verschiedenen Stellen die Aktualisierung des Standorts, aber ich wollte Änderungen an den Providern ständig überwachen, ohne ständig auf Standorte zu warten. –
Ok, in diesem Fall könnte der 'LocationManager' auch helfen. Ich habe meine Antwort aktualisiert. – saschoar