Jetzt ist die endgültige API für Android O veröffentlicht und keine der folgenden Sendungen ist auf der weißen Liste > Ich habe folgendes Problem:
In meiner Anwendung (Targets API 25) habe ich momentan eine BroadcastReceiver
, die Systemereignisse von ACTION_POWER_CONNECTED
und ACTION_POWER_DISCONNECTED
abhört. Jetzt möchte ich meine App auf Android O aktualisieren, aber mit dieser Version kommt eine große Änderung hinzu in Broadcast-Verhalten:
Apps, die auf Android O ausgerichtet sind, können keine Broadcast-Empfänger mehr registrieren für implizite Übertragungen in ihrem Manifest. Eine implizite Übertragung ist ein Sendung, die diese App nicht speziell anvisiert.
Da beide Broadcasts implizit sind, kann ich mich nur über die Context.registerReceiver()
-Methode für sie registrieren, aber damit kommt das Problem: Sobald der Prozess meiner App vom System beendet wird oder sobald das System den Speicher meiner App löscht ( Aufgrund der geringen Speicherkapazität des Geräts geht die Broadcast-Registrierung verloren.
Um dieses Problem zu vermeiden, kann ich das JobScheduler
API mit der setRequiresCharging
Methode für ACTION_POWER_CONNECTED
verwenden, aber für ACTION_POWER_DISCONNECTED
muss ich die registerReceiver
Methode verwenden.
Da meine App die Lautstärke des Geräts steuert (basierend auf diesen Ereignissen), ist es wirklich wichtig, dass keines dieser Ereignisse verpasst wird. Also, wie kann ich sicher auf unterbrochene Energieereignisse in Android O hören?
Übrigens. Ich habe das gleiche Problem mit WIFI disconnect events.
BEARBEITEN: Ich würde das gerne ohne eine Benachrichtigung von einem Vordergrund-Service tun
Jobs können ohne Einschränkung vom System verzögert werden. Die Methode setOverrideDeadline verwendet nur eine Best-Effort-Richtlinie. In diesem Fall können Sie das Ziel-SDK auf 25 setzen oder einen Vordergrunddienst verwenden. Vorbereitungsdienste können vom System mit sehr geringer Wahrscheinlichkeit getötet werden.
Dies ist vielleicht ein Overkill, aber Sie könnten sich für diese Broadcasts in einem Vordergrund Service
anmelden, der von ACTION_BOOT_COMPLETED
gestartet wird.
Sie können einen Hintergrundjob mit dem JobScheduler
unter Verwendung des "erfordert Laden" Einschränkung. Zumindest ist dies der offizielle Lösungsvorschlag .
Tags und Links android android-o android-broadcastreceiver android-jobscheduler