Enregistrer par programmation d'un récepteur de radiodiffusion
Je voudrais savoir quelle est la meilleure pratique/mode de enregistrer par programmation d'un récepteur de radiodiffusion. Je veux m'inscrire spécifique des récepteurs selon le choix de l'utilisateur.
Que l'inscription se fait via le fichier de manifeste, je me demande si il ya une bonne façon de réaliser cet objectif dans le code.
- CoderzPassion Diffusion Récepteur meilleur tutoriel détaillé jamais
- Veuillez consulter ce Lien stackoverflow.com/questions/15698790/...
Vous devez vous connecter pour publier un commentaire.
Il semble que vous voulez contrôler si les composants publié dans le manifeste sont actifs, ne pas inscrire de manière dynamique un récepteur (à partir du Contexte.registerReceiver()) lors de l'exécution.
Si oui, vous pouvez utiliser PackageManager.setComponentEnabledSetting() pour contrôler si ces composants sont actifs:
http://developer.android.com/reference/android/content/pm/PackageManager.html#setComponentEnabledSetting(android.content.ComponentName, int, int)
Remarque si vous êtes uniquement intéressé par la réception d'une émission pendant que vous êtes en cours d'exécution, il est préférable d'utiliser registerReceiver(). Un composant récepteur est principalement utile lorsque vous devez vous assurer que votre application est lancée à chaque fois que l'émission est envoyé.
Un point important que les gens oublient de mentionner, c'est la durée de vie de la
Broadcast Receiver
. La différence de par programme l'enregistrement de s'inscrire dans AndroidManifest.xml est que. Dans le fichier de manifeste, il ne dépend pas demande temps de la vie. Alors que lors de l'enregistrement par programmation il ne dépend pas de la demande temps de la vie. Cela signifie que si vous vous inscrivez dans AndroidManifest.xml, vous pouvez prendre l'diffusé intentions, même si votre application n'est pas en cours d'exécution.Edit: mentionnés en note n'est plus vrai que de Android 3.1, le système Android exclut tous les récepteur de recevoir les intentions par défaut si l'application correspondante n'a jamais été lancé par l'utilisateur ou si le consentement explicite de l'utilisateur arrêté à l'application via le menu Android (dans Gérer → Application). https://developer.android.com/about/versions/android-3.1.html
C'est une caractéristique de sécurité supplémentaire, que l'utilisateur peut être sûr que les demandes qu'il a commencé recevrez diffusion intentions.
De sorte qu'il peut être compris comme des récepteurs par programme enregistré dans l'Application
onCreate()
aurait le même effet avec ceux déclarés dans AndroidManifest.xml à partir d'Android 3.1 ci-dessus.Définir un récepteur de radiodiffusion n'importe où dans l'Activité/Fragment comme ceci:
Définir IntentFilter dans
onCreate()
Maintenant enregistrer le BroadcastReciever dans
onResume()
et annuler l'inscription dansonPause()
[parce qu'il n'y a pas d'utilisation de diffusion si l'activité est en pause].Pour le détail tutoriel, jetez un oeil à récepteur de radiodiffusion-deux façons de mettre en œuvre.
En fonction de l'Écoute et de la Radiodiffusion et des Messages de type Global, et le Réglage de l'alarme dans Tâches courantes et Comment les Faire dans Android:
Prendre un coup d'oeil à registerReceiver (BroadcastReceiver récepteur, IntentFilter filtre) pour plus d'info.
context.registerReceiver
, mais n'est pas appelé pouvez vous s'il vous plaît regardez cette question stackoverflow.com/questions/13238600/...Il est de bonne pratique de toujours fournir l'autorisation lors de l'enregistrement du récepteur, sinon, vous recevrez pour toute application qui envoie un correspondant de l'intention. Cela peut permettre à des applications malveillantes pour la diffusion de votre récepteur.
pour LocalBroadcastManager
et s'inscrire dans
onResume
et il Désinscription
onStop
et la recevrez ..
où IntentFilter est
Deux choix
registerReceiver(...
) dansonStart()
etunregisterReceiver(...)
dansonStop()
registerReceiver(...)
dansonCreate(...)
etunregisterReceiver(...)
dansonDestroy()
Bonus:
Si vous ne voulez pas écrire du code réutilisable pour l'enregistrement et l'annulation de l'enregistrement d'un BroadcastReceiver encore et encore chaque Activité, puis,
Voici l'extrait de code:
Voir le code complet:
ICI
Créer un récepteur de radiodiffusion
[BroadcastReceiver(Enabled = true, Exporté = false)]
De votre activité ajoutez ce code: