FMUSER Wirless transmet la vidéo et l'audio plus facilement!

[email protected] WhatsApp + 8618078869184
Langue

    Explication détaillée de la diffusion sous Android

     

    La diffusion est divisée en deux types différents: "Diffusions normales" et "Diffusions ordonnées". La diffusion ordinaire est complètement asynchrone et peut être reçue par tous les récepteurs de diffusion en même temps (logiquement). L'efficacité de la livraison des messages est relativement élevée, mais l'inconvénient est que le récepteur ne peut pas transmettre le résultat du traitement au récepteur suivant, et il ne peut pas être terminé. Propagation d'intention de diffusion; cependant, la diffusion ordonnée est basée sur la priorité déclarée par le récepteur (déclarée dans l'attribut android: priority de l'élément intent-filter, plus le nombre est grand, plus la priorité est élevée, la plage de valeurs: -1000 à 1000. C'est aussi possible Appelez le setPriority () de l'objet IntentFilter à définir), et le destinataire reçoit la diffusion à son tour. Par exemple, si le niveau de A est supérieur à celui de B et que le niveau de B est supérieur à C, la diffusion est d'abord transmise à A, puis à B et enfin à C. peut stocker des données dans la diffusion. Lorsque l'émission est envoyée à B, B peut obtenir les données stockées par A à partir de l'émission.

     

    Context.sendBroadcast ()

       Ce qui est envoyé est une émission ordinaire et tous les abonnés ont la possibilité de l'obtenir et de la traiter.

     

    Context.sendOrderedBroadcast ()

       L'envoi est une diffusion ordonnée. Le système exécutera les récepteurs un par un selon la priorité déclarée par le récepteur. Le récepteur précédent a le droit de mettre fin à la diffusion (BroadcastReceiver.abortBroadcast ()). Si l'émission est terminée par le récepteur précédent, ce dernier ne peut plus recevoir l'émission. Pour une diffusion ordonnée, le récepteur précédent peut stocker le résultat du traitement dans l'intention de diffusion, puis le transmettre au récepteur suivant.

     
    Le récepteur de diffusion (BroadcastReceiver) est utilisé pour recevoir l'intention de diffusion, et l'envoi de l'intention de diffusion est réalisé en appelant Context.sendBroadcast () et Context.sendOrderedBroadcast (). Habituellement, une intention de diffusion peut être reçue par plusieurs récepteurs de diffusion abonnés à cette intention. Cette fonctionnalité est similaire aux récepteurs de messages de rubrique dans JMS. Pour implémenter une méthode de récepteur de diffusion, procédez comme suit:

     

    La première étape: définir le récepteur de diffusion, hériter de BroadcastReceiver et réécrire la méthode onReceive ().

    classe publique IncomingSMSReceiver extendBroadcastReceiver {
      @Override public void onReceive (Contextcontext, Intentintent) {
      }
    }

     

    Étape 2: Abonnez-vous à la diffusion Intention d'intérêt, il existe deux méthodes d'abonnement:

    Le premier type: utilisez le code pour vous abonner (abonnement dynamique)

    Filtre IntentFilter = newIntentFilter ("android.provider.Telephony.SMS_RECEIVED");
    Récepteur IncomingSMSReceiver = newIncomingSMSReceiver ();
    registerReceiver (récepteur, filtre);

     

    Le deuxième type: abonnez-vous à la nœud dans le fichier AndroidManifest.xml (abonnement statique)


      
           
      


    Jetons un coup d'œil à la différence entre un abonnement de diffusion dynamique et un abonnement de diffusion statique:
    La diffusion par abonnement statique est également appelée: diffusion résidente. Lorsque votre application est fermée, s'il y a un message de diffusion, le récepteur de diffusion que vous avez écrit peut également le recevoir. Sa méthode d'enregistrement est AndroidManifast dans votre application. .xml pour l'abonnement.

     

    La diffusion dynamique par abonnement est également appelée: diffusion non résidente. Lorsque l'application se termine, la diffusion disparaîtra naturellement. Par exemple, vous vous abonnez à la diffusion dans onCreate ou onResume dans l'activité, et vous devez annuler l'abonnement à la diffusion dans onDestory ou onPause. Sinon, une exception sera signalée, de sorte que votre récepteur de diffusion sera un non-résident.

     

    Il y a un autre détail ici qui concerne les deux méthodes d'abonnement. Lors de l'envoi de diffusions, vous devez faire attention aux points suivants: La méthode d'intention implicite est utilisée pour l'enregistrement dynamique, vous devez donc utiliser l'intention implicite d'envoyer lors de l'envoi de diffusions. , Sinon, le récepteur de diffusion ne pourra pas recevoir l'émission. Faites attention à ce point. Mais lors de l'abonnement statique, car il est abonné à AndroidMainfest.xml, il est possible d'utiliser Display Intent et implicit Intent lors de l'envoi de diffusions (bien sûr, ce n'est que pour les récepteurs de diffusion définis par nous-mêmes), donc juste au cas où, nous utilisons généralement implicite Intention d'envoyer une diffusion.

     

    Regardons un exemple:

    Jetez un œil à la structure du projet:

     

    Jetez un œil à la diffusion de l'abonnement statique:
    paquet com.broadcast.demo;

    importer android.app.Activity;
    importer android.content.Intent;
    importer android.os.Bundle ;
    importer android.view.View ;
    importer android.view.View.OnClickListener;
    importer android.widget.Button;

    importer com.example.androidbroadcastdemo.R;

    / **
     * Diffusion d'abonnement statique
     * @auteur weijiang204321
     *
     */
    public class StaticRegisterBroadcastActivity étend l'activité {

    @ Override
    protected void onCreate (Bundle savedInstanceState) {
    super.onCreate (savedInstanceState);
    setContentView (R.layout.activity_main);
    Bouton btn = (Bouton) findViewById (R.id.btn);
    À
    btn.setOnClickListener (nouveau OnClickListener () {
    @ Override
    public void onClick (vue v) {
    // Utilisez un moyen statique pour enregistrer la diffusion, vous pouvez utiliser l'intention d'affichage pour envoyer la diffusion
    Diffusion d'intention = nouvelle intention ("com.broadcast.set.broadcast");
    sendBroadcast (diffusion, nul);
    }
    À
    });
    }
    À
    }


    Abonnez-vous à AndroidMainfest.xml:



    <manifeste xmlns:android="
    http://schemas.android.com/apk/res/android"
        package = "com.example.androidbroadcastdemo"
        android: versionCode = "1"
        android: versionName = "1.0">

        <utilise-sdk
            android: minSdkVersion = "8"
            android: targetSdkVersion = "18" />
       
       
       
       
       
       

        <demande
            android: allowBackup = "true"
            android: icon = "@ drawable / ic_launcher"
            android: label = "@ string / app_name"
            android: theme = "@ style / AppTheme">
            <activité
                android: name = "com.broadcast.demo.StaticRegisterBroadcastActivity"
                android: label = "@ string / app_name">
               
                   
                   
               
           
           
           
           
               
                   
               
           
           
           
           
           
               
                   
               
           
           
           
           
               
                   
               
           
           
           
           
           
               
                   
               
           
           
       

    Ne vous inquiétez pas pour les autres contenus pour le moment, comme nous en reparlerons plus tard, ici nous nous concentrons uniquement sur l'enregistrement des diffusions statiques


          
               
                   
               
           


    Jetons un coup d'œil au récepteur de l'émission:

    paquet com.broadcast.receiver;

    importer android.content.BroadcastReceiver;
    importer android.content.Context;
    importer android.content.Intent;
    importer android.util.Log ;

    / **
     * Récepteur de diffusion
     * @auteur weijiang204321
     *
     */
    public class UnSortBroadcastReceiver étend BroadcastReceiver {

    @ Override
    public void onReceive (Contexte contextuel, intention d'intention) {
    Log.e ("Intent_Action:", intent.getAction () + "");
    }

    }
    La logique de la méthode onReceive dans le récepteur de diffusion est très simple, qui consiste à imprimer le contenu de l'action.
    Exécutez le programme, le résultat est très simple, voici pas l'image.

     

    Jetons un coup d'œil aux abonnements dynamiques:


    paquet com.broadcast.demo;

    importer android.app.Activity;
    importer android.content.Intent;
    importer android.content.IntentFilter;
    importer android.os.Bundle ;
    importer android.view.View ;
    importer android.view.View.OnClickListener;
    importer android.widget.Button;

    importer com.broadcast.receiver.UnSortBroadcastReceiver;
    importer com.example.androidbroadcastdemo.R;

    / **
     * Utilisez un moyen dynamique pour enregistrer la diffusion
     * @auteur weijiang204321
     *
     */
    public class DynamicRegisterBroadcastActivity étend l'activité {
    À
    public static final String NEW_LIFEFORM_DETECTED = "com.dxz.broadcasttest.NEW_LIFEFORM";
    récepteur UnSortBroadcastReceiver protégé;
    À
    @ Override
    protected void onCreate (Bundle savedInstanceState) {
    super.onCreate (savedInstanceState);
    setContentView (R.layout.activity_main);
    Bouton btn0 = (Bouton) findViewById (R.id.btn);
    btn0.setOnClickListener (nouveau OnClickListener () {
    public void onClick (vue v) {
    // Envoyer la diffusion
    Intent it = new Intent (NEW_LIFEFORM_DETECTED);
    sendBroadcast (it);
    }
    });
    }

    @ Override
    protected void onResume () {
    super.onResume ();
    // S'inscrire à la diffusion
    IntentFilter counterActionFilter = new IntentFilter (NEW_LIFEFORM_DETECTED);
    récepteur = nouveau UnSortBroadcastReceiver ();
    registerReceiver (récepteur, counterActionFilter);
    }

    @ Override
    protected void onPause () {
    super.onPause ();
    // Annuler la diffusion
    unregisterReceiver (récepteur);
    }
    }
    Ici, nous nous abonnons à la diffusion dans onResume et nous nous désabonnons à la diffusion dans onPause.
    Remplacez l'activité lancée par DynamicRegisterBroadcastActivity dans AndroidMainfest.xml. L'autre contenu n'a pas besoin d'être modifié. Exécutez le programme et imprimez le résultat est très simple, donc je ne verrai pas l'image ici.

     

    Jetons un coup d'œil à la diffusion ordonnée et à la diffusion non ordonnée

    Nous l'avons déjà mentionné au début, jetons un coup d'œil à la diffusion désordonnée:

    Nous définissons d'abord deux récepteurs de diffusion:

    Le premier récepteur de diffusion:


    paquet com.broadcast.receiver;

    importer android.content.BroadcastReceiver;
    importer android.content.Context;
    importer android.content.Intent;
    importer android.util.Log ;

    / **
     * Récepteur de diffusion A
     * @auteur weijiang204321
     *
     */
    public class SortBroadcastReceiverA étend BroadcastReceiver {

    @ Override
    public void onReceive (Contexte contextuel, intention d'intention) {
    Log.e ("Démo:", "récepteur de diffusion A");
    }

    }
    Le deuxième récepteur de diffusion:

    paquet com.broadcast.receiver;

    importer android.content.BroadcastReceiver;
    importer android.content.Context;
    importer android.content.Intent;
    importer android.util.Log ;

    / **
     * Récepteur de diffusion B
     * @auteur weijiang204321
     *
     */
    public class SortBroadcastReceiverB étend BroadcastReceiver {

    @ Override
    public void onReceive (Contexte contextuel, intention d'intention) {
    Log.e ("Démo:", "Diffusion B");
    }

    À
    À
    }


    Abonnez-vous pour diffuser dans AndroidMainfest.xml


     
               
                   
               

           

               
                   
               

    résultat de l'opération:


    Le résultat en cours d'exécution est un peu étrange. Pourquoi le récepteur B à l'avant et le récepteur A à l'arrière? La raison en est que lorsque nous nous abonnons à la diffusion dans AndroidMainfest.xml, nous définissons la valeur d'attribut android: priority dans le filtre d'intention. Plus la valeur est élevée, plus la priorité est élevée. , La priorité du récepteur B est 1000, la priorité du récepteur A est 999, donc B reçoit la diffusion en premier, puis A la reçoit, mais il n'y a pas de connexion entre le récepteur B et le récepteur A, et il ne peut y avoir aucune interaction Oui, car il s'agit d'une diffusion dans le désordre et asynchrone, nous pouvons faire une expérience en ajoutant du code à la méthode onReceiver en B:

    abortBroadcast (); // Termine la transmission de cette émission

    résultat de l'opération:

     

    Nous pouvons voir l'erreur d'invite, c'est-à-dire qu'une diffusion non ordonnée n'est pas autorisée à mettre fin à la diffusion. En fait, la terminaison est inutile, car le récepteur A reçoit toujours l'émission.

     

    Jetons un coup d'œil à la diffusion ordonnée, le code doit être modifié:

    Le premier est lors de l'envoi d'une diffusion:


    Diffusion d'intention = nouvelle intention ("com.broadcast.set.broadcast");
    sendOrderedBroadcast (diffusion, null);
    Ensuite, ajoutez une méthode pour terminer la diffusion dans le récepteur B:
    abortBroadcast ();

    L'autre code n'a pas besoin d'être modifié, le résultat de l'opération:

     

    Il n'y a que le récepteur B, le récepteur A ne reçoit pas l'émission, car la diffusion se termine dans le récepteur B et les récepteurs suivants ne peuvent pas l'accepter.

    Modifiez le code ci-dessous:

    Destinataire B:


    paquet com.broadcast.receiver;

    importer android.content.BroadcastReceiver;
    importer android.content.Context;
    importer android.content.Intent;
    importer android.os.Bundle ;
    importer android.util.Log ;

    / **
     * Récepteur de diffusion B
     * @auteur weijiang204321
     *
     */
    public class SortBroadcastReceiverB étend BroadcastReceiver {

    @ Override
    public void onReceive (Contexte contextuel, intention d'intention) {
    Log.e ("Démo:", "récepteur de diffusion B");
    Bundle bundle = nouveau Bundle ();
    bundle.putString ("next_receiver", "next broadcast receiver");
    setResultExtras (ensemble);
    }
    À
    }
    Une fois que B reçoit l'émission, il stocke une valeur et la transmet au récepteur suivant.


    Code du récepteur A:


    paquet com.broadcast.receive

     

     

     

     

    Liste de tous Question

    Surnom

    Email

    fréquemment posées

    Notre autre produit:

    Ensemble d'équipement de station de radio FM professionnelle

     



     

    Solution IPTV pour hôtel

     


      Entrez l'email pour avoir une surprise

      fmuser.org

      es.fmuser.org
      it.fmuser.org
      fr.fmuser.org
      de.fmuser.org
      af.fmuser.org -> Afrikaans
      sq.fmuser.org -> albanais
      ar.fmuser.org -> arabe
      hy.fmuser.org -> Armenian
      az.fmuser.org -> azerbaïdjanais
      eu.fmuser.org -> basque
      be.fmuser.org -> biélorusse
      bg.fmuser.org -> Bulgare
      ca.fmuser.org -> catalan
      zh-CN.fmuser.org -> chinois (simplifié)
      zh-TW.fmuser.org -> Chinois (traditionnel)
      hr.fmuser.org -> croate
      cs.fmuser.org -> tchèque
      da.fmuser.org -> danois
      nl.fmuser.org -> Néerlandais
      et.fmuser.org -> estonien
      tl.fmuser.org -> Philippin
      fi.fmuser.org -> finnois
      fr.fmuser.org -> Français
      gl.fmuser.org -> Galicien
      ka.fmuser.org -> géorgien
      de.fmuser.org -> allemand
      el.fmuser.org -> Grec
      ht.fmuser.org -> Créole haïtien
      iw.fmuser.org -> hébreu
      hi.fmuser.org -> Hindi
      hu.fmuser.org -> Hongrois
      is.fmuser.org -> islandais
      id.fmuser.org -> indonésien
      ga.fmuser.org -> irlandais
      it.fmuser.org -> Italien
      ja.fmuser.org -> japonais
      ko.fmuser.org -> coréen
      lv.fmuser.org -> letton
      lt.fmuser.org -> Lituanien
      mk.fmuser.org -> macédonien
      ms.fmuser.org -> malais
      mt.fmuser.org -> maltais
      no.fmuser.org -> Norwegian
      fa.fmuser.org -> persan
      pl.fmuser.org -> polonais
      pt.fmuser.org -> portugais
      ro.fmuser.org -> Roumain
      ru.fmuser.org -> russe
      sr.fmuser.org -> serbe
      sk.fmuser.org -> slovaque
      sl.fmuser.org -> Slovène
      es.fmuser.org -> espagnol
      sw.fmuser.org -> Swahili
      sv.fmuser.org -> suédois
      th.fmuser.org -> Thai
      tr.fmuser.org -> turc
      uk.fmuser.org -> ukrainien
      ur.fmuser.org -> ourdou
      vi.fmuser.org -> Vietnamienne
      cy.fmuser.org -> Gallois
      yi.fmuser.org -> Yiddish

       
  •  

    FMUSER Wirless transmet la vidéo et l'audio plus facilement!

  • Contactez-Nous

    Adresse :
    No.305 Chambre HuiLan Building No.273 Huanpu Road Guangzhou Chine 510620

    Courriel :
    [email protected]

    Tél/WhatApps :
    +8618078869184

  • Catégories

  • Newsletter

    Prénom ou nom complet

    Email

  • solution paypal  Western UnionBanque de Chine
    Courriel :[email protected]   WhatsApp: +8618078869184 Skype: sky198710021 Discuter avec moi
    Droit d'auteur 2006-2020 Powered By www.fmuser.org

    Contactez-Nous