Ich baute eine App, Popup-Benachrichtigung in Standort ich eingestellt. Alles funktioniert reibungslos. Auch nach dem Neustart meines Geräts. Es gibt kein Problem. Aber ich habe bemerkt, dass, wenn ich das GPS ausschalte und dann mein Gerät neu starte, der BroadcastReceiver wahrscheinlich versucht, sich an der Geofence API anzumelden und einen Fehler bekommt, weil es kein GPS gibt. und die Geofence-Benachrichtigung sind Popup nicht mehr, bis ich mein Gerät mit GPS-Modus neu starten. Muss ich AlarmManager verwenden? Für push einige Aktualisierung jedes x Zeit? Um zu überprüfen, ob ein GPS-Modus aktiviert ist?Wie kann Geofence nach dem Neustart des Geräts registriert werden?
Antwort
Bei dieser Lösung wird davon ausgegangen, dass Sie die Geofence-Informationen, die Sie verwenden möchten, bereits so speichern, dass sie nach Neustarts des Geräts bestehen bleiben.
Beim ersten Start im BroadcastReceiver, der die RECEIVE_BOOT_COMPLETED
10 behandelt, überprüfen Sie, ob GPS is enabled. Wenn dies der Fall ist, fahren Sie normal fort, aber wenn nicht, fügen Sie dies Ihrem Empfänger hinzu:
@Override
public void onReceive(Context context, Intent intent) {
//Or whatever action your receiver accepts
if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){
LocationManager locationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
if(!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER){
context.registerReceiver(this, new IntentFilter(LocationManager.PROVIDERS_CHANGED_ACTION));
}
else{
//We are good, continue with adding geofences!
}
}
if(intent.getAction().equals(LocationManager.PROVIDERS_CHANGED_ACTION)){
if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER){
context.unregisterReceiver(this);
//We got our GPS stuff up, add our geofences!
}
}
}
Sie können dies zu Ihrem Manifest hinzufügen. In diesem Beispiel wird davon ausgegangen, dass Sie einen BroadcastReceiver com.example.MyBroadcastReceiver haben, ersetzen Sie diesen durch Ihren eigenen. Dieser Empfänger erhält Broadcast Intents, wenn das GPS ein- oder ausgeschaltet wird.
<receiver android:name="com.example.MyBroadcastReceiver">
<intent-filter>
<action android:name="android.location.PROVIDERS_CHANGED" />
</intent-filter>
</receiver>
Danke, ich werde es versuchen – Anna
Vielen Dank, ich werde es versuchen – Anna
Es funktioniert! Vielen Dank – Anna
Muss ich verwenden: "context.registerReceiver (this, neue IntentFilter (LocationManager.PROVIDERS_CHANGED_ACTION)); Oder mContext.unregisterReceiver (this)? – Anna