Je dois vérifier si mon destinataire enregistré est toujours enregistré, sinon comment puis-je vérifier les méthodes?
254
Je dois vérifier si mon destinataire enregistré est toujours enregistré, sinon comment puis-je vérifier les méthodes?
Réponses:
Je ne suis pas sûr que l'API fournit directement une API, si vous considérez ce fil :
la source
Il n'y a pas de fonction API pour vérifier si un récepteur est enregistré. La solution consiste à mettre votre code dans un
try catch block as done below.
la source
null
. Mais comme vous l'avez souligné, j'y vaistry catch
. Ridicule.solution la plus simple
dans le récepteur:
dans du code:
annonce 1
-- en réponse à:
- méthode "plus ellegant" ajoutée dans le récepteur pour enregistrer et positionner le drapeau
@amin - voir la durée de vie du récepteur enregistré dans le code (non enregistré par le système par l'entrée du manifeste) :)
la source
J'utilise cette solution
la source
Vous avez plusieurs options
Vous pouvez mettre un drapeau dans votre classe ou activité. Mettez une variable booléenne dans votre classe et regardez cet indicateur pour savoir si vous avez enregistré le récepteur.
Créez une classe qui étend le récepteur et là, vous pouvez utiliser:
Le modèle singleton n'a qu'une seule instance de cette classe dans votre projet.
Implémentez les méthodes pour savoir si le récepteur est enregistré.
la source
Vous devez utiliser try / catch:
la source
Vous pouvez le faire facilement ....
1) créer une variable booléenne ...
2) Lorsque vous enregistrez votre récepteur de diffusion, réglez-le sur TRUE
3) Dans le onPause () faites-le ...
Just it, et maintenant, vous ne recevrez plus de message d'erreur d'exception sur onPause ().
Astuce 1: Utilisez toujours l'unregisterReceiver () dans onPause () pas dans onDestroy () Astuce2: N'oubliez pas de définir la variable bolBroadcastRegistred sur FALSE lors de l'exécution de l'unregisterReceive ()
Succès!
la source
Si vous mettez ceci sur la méthode onDestroy ou onStop. Je pense que lorsque l'activité a été recréée, le MessageReciver n'a pas été créé.
la source
J'ai utilisé Intent pour informer Broadcast Receiver de l'instance du gestionnaire du thread d'activité principal et j'ai utilisé Message pour transmettre un message à l'activité principale.
J'ai utilisé un tel mécanisme pour vérifier si le récepteur de diffusion est déjà enregistré ou non. Parfois, cela est nécessaire lorsque vous enregistrez votre récepteur de diffusion de manière dynamique et que vous ne voulez pas le faire deux fois ou que vous présentez à l'utilisateur si le récepteur de diffusion est en cours d'exécution.
Activité principale:
Récepteur de diffusion:
la source
Personnellement, j'utilise la méthode d'appeler unregisterReceiver et d'avaler l'exception si elle est levée. Je suis d'accord pour dire que c'est moche mais la meilleure méthode actuellement fournie.
J'ai soulevé une demande de fonctionnalité pour obtenir une méthode booléenne pour vérifier si un récepteur est enregistré ajouté à l'API Android. Veuillez le prendre en charge ici si vous souhaitez le voir ajouté: https://code.google.com/p/android/issues/detail?id=73718
la source
J'ai votre problème, j'ai rencontré le même problème dans ma demande. J'appelais registerReceiver () plusieurs fois dans l'application.
Une solution simple à ce problème consiste à appeler le registerReceiver () dans votre classe d'application personnalisée. Cela garantira que votre récepteur de diffusion sera appelé un seul dans l'ensemble de votre cycle de vie de l'application.
la source
Voici comment je l'ai fait, c'est une version modifiée de la réponse donnée par ceph3us et éditée par slinden77 (entre autres, j'ai supprimé les valeurs de retour des méthodes dont je n'avais pas besoin):
Puis sur une classe d'activité:
la source
j'ai mis ce code dans mon activité parentale
List registeredReceivers = new ArrayList <> ();
la source
Pour moi, ce qui suit a fonctionné:
la source
Voici ce que j'ai fait pour vérifier si le diffuseur est déjà enregistré, même si vous fermez votre application (finish ())
La première fois que vous exécutez votre application, envoyez d'abord une diffusion, elle renverra true / false selon que votre diffuseur fonctionne toujours ou non.
Mon diffuseur
Mon activité principale
la source
Vous pouvez utiliser Dagger pour créer une référence de ce récepteur.
Fournissez-le d'abord:
Puis injecter où vous avez besoin ( en utilisant
constructor
ou sur le terraininjection
)et passez-le simplement à
registerReceiver
.Mettez-le également en
try/catch
bloc aussi.la source
la source
Vérifiez simplement NullPointerException. Si le récepteur n'existe pas, alors ...
la source