Broadcast Ladegerät in Android O getrennt

8

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

    
Cilenco 11.06.2017, 20:30
quelle

3 Antworten

2

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.

    
greywolf82 12.06.2017 16:15
quelle
2

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.

    
Kevin Krumwiede 14.06.2017 07:15
quelle
-3

Sie können einen Hintergrundjob mit dem JobScheduler unter Verwendung des "erfordert Laden" Einschränkung. Zumindest ist dies der offizielle Lösungsvorschlag .

    
artkoenig 14.06.2017 08:48
quelle