Ich würde gerne wissen, wie man einen Rundfunkempfänger programmgesteuert registriert. Ich möchte bestimmte Empfänger entsprechend der Benutzerauswahl registrieren.
Da die Registrierung über die Manifestdatei erfolgt, frage ich mich, ob es einen geeigneten Weg gibt, dies im Code zu erreichen.
android
broadcastreceiver
CoolStraw
quelle
quelle
Antworten:
Es hört sich so an, als ob Sie steuern möchten, ob in Ihrem Manifest veröffentlichte Komponenten aktiv sind, und einen Empfänger während der Ausführung nicht dynamisch registrieren (über Context.registerReceiver ()).
In diesem Fall können Sie mit PackageManager.setComponentEnabledSetting () steuern, ob diese Komponenten aktiv sind:
http://developer.android.com/reference/android/content/pm/PackageManager.html#setComponentEnabledSetting(android.content.ComponentName, int, int)
Hinweis: Wenn Sie nur während der Ausführung eine Sendung empfangen möchten, ist es besser, registerReceiver () zu verwenden. Eine Empfängerkomponente ist in erster Linie nützlich, wenn Sie sicherstellen müssen, dass Ihre App bei jedem Senden der Sendung gestartet wird.
quelle
In Ihrer
onCreate
Methode können Sie einen Empfänger wie folgt registrieren:Denken Sie daran, dies in der folgenden
onDestroy
Methode auszuführen :quelle
onDestroy()
der Aufruf erfolgt, wodurch ein potenzieller Speicherverlust entsteht. Es ist besser, sich inonStart()
/ zu registrieren / abzumeldenonStop()
.Ein wichtiger Punkt, den die Leute vergessen zu erwähnen, ist die Lebenszeit des
Broadcast Receiver
. Der Unterschied zwischen der programmgesteuerten Registrierung und der Registrierung in AndroidManifest.xml besteht darin, dass. In der Manifestdatei hängt dies nicht von der Lebensdauer der Anwendung ab. Bei der programmgesteuerten Registrierung hängt dies von der Lebensdauer der Anwendung ab. Dies bedeutet, dass Sie bei der Registrierung in AndroidManifest.xml die gesendeten Absichten auch dann erfassen können, wenn Ihre Anwendung nicht ausgeführt wird.Bearbeiten: Der erwähnte Hinweis gilt ab Android 3.1 nicht mehr. Das Android-System schließt standardmäßig alle Empfänger vom Empfang von Absichten aus, wenn die entsprechende Anwendung vom Benutzer noch nie gestartet wurde oder wenn der Benutzer die Anwendung explizit über das Android-Menü gestoppt hat (in Verwalten → Anwendung). https://developer.android.com/about/versions/android-3.1.html
Dies ist eine zusätzliche Sicherheitsfunktion, da der Benutzer sicher sein kann, dass nur die von ihm gestarteten Anwendungen Broadcast-Absichten erhalten.
Es kann also verstanden werden, dass Empfänger, die programmgesteuert in Anwendungen registriert
onCreate()
sind, den gleichen Effekt haben wie Empfänger , die in AndroidManifest.xml von Android 3.1 oben deklariert wurden .quelle
Definieren Sie einen Broadcast-Empfänger an einer beliebigen Stelle in Aktivität / Fragment wie folgt:
Definieren Sie IntentFilter in
onCreate()
Registrieren Sie nun den BroadcastReciever in
onResume()
und heben Sie die Registrierung aufonPause()
[da Broadcast nicht verwendet wird, wenn die Aktivität angehalten wird].Im Detail-Tutorial sehen Sie sich die zwei Möglichkeiten zur Implementierung des Broadcast-Empfängers an .
quelle
quelle
Laut Abhören und Senden globaler Nachrichten sowie Festlegen von Alarmen in allgemeinen Aufgaben und Vorgehensweise in Android :
Weitere Informationen finden Sie unter registerReceiver (BroadcastReceiver-Empfänger, IntentFilter-Filter) .
quelle
context.registerReceiver
aber es wird nicht angerufen. KönnenEs wird empfohlen, bei der Registrierung des Empfängers immer die Berechtigung anzugeben. Andernfalls erhalten Sie für jede Anwendung, die eine übereinstimmende Absicht sendet. Dadurch können böswillige Apps an Ihren Empfänger gesendet werden.
quelle
für LocalBroadcastManager
und registrieren Sie sich in
onResume
und hebe die Registrierung auf
onStop
und erhalte es ..
wo IntentFilter ist
quelle
Zwei Möglichkeiten
registerReceiver(...
) inonStart()
undunregisterReceiver(...)
inonStop()
registerReceiver(...)
inonCreate(...)
undunregisterReceiver(...)
inonDestroy()
Bonus:
Wenn Sie keinen Boilerplate-Code schreiben möchten, um einen BroadcastReceiver in jeder Aktivität immer wieder zu registrieren und die Registrierung aufzuheben, dann
Hier ist das Code-Snippet:
Siehe vollständigen Code:
HIER
quelle
Erstellen Sie einen Rundfunkempfänger
[BroadcastReceiver (Aktiviert = wahr, Exportiert = falsch)]
Fügen Sie aus Ihrer Aktivität diesen Code hinzu:
quelle