11
votes

Comment puis-je envoyer des données de résultat du récepteur de diffusion à l'activité

J'ai une activité qui appelle un récepteur de diffusion. Le récepteur de diffusion attend et écoute GPS. Lorsque l'auditeur reçoit le nouveau point, je souhaite envoyer ce nouveau point à l'activité. Comment puis-je envoyer des données du récepteur de diffusion à l'activité?

J'ai besoin d'un auditeur dans mon activité en attente de réponse du récepteur de diffusion. Comment puis-je faire ça?


0 commentaires

4 Réponses :


0
votes

Il suffit de mettre en œuvre le récepteur de diffusion dans l'activité. Enregistrez le récepteur avec le contexte de l'activité.


0 commentaires

3
votes

Vous avez quelques façons de le faire et plusieurs considérations.

  1. Vous pouvez sonder, ce qui signifie vérifier à nouveau une fois en utilisant l'un ou l'autre gestionnaire ou minuterie pour voir si les informations sont arrivées.

  2. Vous pouvez enregistrer le récepteur de diffusion comme classe interne de votre activité, puis vous pouvez appeler des méthodes dans votre activité.

  3. Vous pouvez avoir la diffusion envoyer une intention de votre classe avec l'information, mais si votre activité n'est pas au premier plan, vous pouvez l'apporter là-bas, et ce n'est pas 100% ce que vous voulez ...

    En ce qui concerne une certaine considération, le Broadcastreciver est principalement utilisé comme un auditeur, non plus de Notider, la classe intérieure est la meilleure pratique, à mon avis, à utiliser avec des activités, pour des services, vous pouvez l'utiliser comme une classe autonome et l'enregistrer dans le manifeste .xml ... Maintenant, vous devez maintenant vous rappeler que lorsque la diffusion est diffusée, votre activité peut être inactive en raison d'un changement d'orientation ou d'un événement qui fait une pause de votre application afin que vous puissiez manquer l'événement. Je n'écoute pas les événements système mais à mes propres événements, donc j'utilise une émission collante pour éviter ce problème.


4 commentaires

Merci. Dans la troisième solution, comment puis-je obtenir cette intention? Pourriez-vous s'il vous plaît expliquer plus?


Bien sur. Vous envoyez l'intention à l'aide de context.startactivity () Vous obtenez l'intention de l'activité de l'une des deux manières, utilisez la méthode getintent dans ONCREATE ou ONRESUME ou dans la méthode de remplacement d'ONNEWINTENCE. La question est de savoir si votre activité est redémarrée, vous pouvez en savoir plus à ce sujet dans l'activité Java Doc et l'intention Java Doc, en particulier celle qui traite des drapeaux d'intention (single_top)


Vous avez décidé d'utiliser le modèle d'auditeur, cela pourrait fonctionner correctement, je n'ai-je pas oublié »si l'un de votre auditeur est une activité que vous fuyez le contexte si vous obtenez une orientation ou un autre événement de modification de la configuration qui provoque l'application. DIE et Get Recrey, dans ce cas, vous devez modifier votre code ONRESUME et ONUPAUSE (ou sur Créer et ONDESTROY) qui supprimera l'auditeur et la remettra une fois que l'activité revient.


Oh, et après le retour de l'activité et que vous avez à nouveau enregistré l'auditeur, vous devez vérifier si vous n'avez pas manqué d'événement qui se produisait pendant cette période ...



4
votes

J'ai défini un auditeur pour mon récepteur et utilisez-le dans l'activité et il fonctionne parfaitement. Est-il possible d'arriver tout problème plus tard? XXX PRE>

} P>

dans ma classe de récepteur Wich est nommé comme récepteurPositionArmarm: P>

OnNewLocationListener onNewLocationListener = new OnNewLocationListener() {
        @Override
        public void onNewLocationReceived(Location location) {
            // do something

            // then stop listening
            ReceiverPositioningAlarm.clearOnNewLocationListener(this);
        }
    };

    // start listening for new location
    ReceiverPositioningAlarm.setOnNewLocationListener(
            onNewLocationListener);


1 commentaires

Je crains que vous gardes de fortes références et que cela pourrait être mauvais



22
votes

Vous pouvez appeler le récepteur de votre activité. Si vous ne souhaitez pas ajouter la logique du récepteur dans votre activité, vous pouvez utiliser un récepteur abstrait.

vous abstrait récepteur: xxx

dans votre activité: < / p> xxx

J'espère que cela vous aidera ...


1 commentaires

Comment allez-vous instancier la classe abstraite?