FMUSER ¡Transmite video y audio sin cables más fácilmente!

[email protected] WhatsApp + 8618078869184
Idioma

    Explicación detallada de Broadcast en Android

     

    La retransmisión se divide en dos tipos diferentes: "retransmisiones normales" y "retransmisiones ordenadas". La transmisión ordinaria es completamente asíncrona y puede ser recibida por todos los receptores de transmisión al mismo tiempo (lógicamente). La eficiencia de la entrega de mensajes es relativamente alta, pero la desventaja es que el receptor no puede pasar el resultado del procesamiento al siguiente receptor y no se puede terminar. Propagación de intención de difusión; sin embargo, la transmisión ordenada se basa en la prioridad declarada por el receptor (declarada en el atributo android: priority del elemento de filtro de intención, cuanto mayor es el número, mayor es la prioridad, el rango de valores: -1000 a 1000. También es posible Llame a setPriority () del objeto IntentFilter para establecer), y el destinatario recibe la transmisión a su vez. Por ejemplo, si el nivel de A es más alto que el de B, y el nivel de B es más alto que C, entonces la transmisión se transmite primero a A, luego a B y finalmente a C.Después de que A recibe la transmisión, puede almacenar datos en la transmisión. Cuando la transmisión se envía a B, B puede obtener los datos almacenados por A de la transmisión.

     

    Context.sendBroadcast ()

       Lo que se envía es una transmisión ordinaria y todos los suscriptores tienen la oportunidad de obtenerla y procesarla.

     

    Context.sendOrderedBroadcast ()

       El envío es una transmisión ordenada. El sistema ejecutará los receptores uno a uno según la prioridad declarada por el receptor. El receptor anterior tiene derecho a finalizar la transmisión (BroadcastReceiver.abortBroadcast ()). Si la transmisión es interrumpida por el receptor anterior, este último El receptor ya no puede recibir la transmisión. Para la transmisión ordenada, el receptor anterior puede almacenar el resultado del procesamiento en la intención de transmisión y luego pasarlo al siguiente receptor.

     
    El receptor de transmisión (BroadcastReceiver) se utiliza para recibir la intención de transmisión, y el envío de la intención de transmisión se realiza llamando a Context.sendBroadcast () y Context.sendOrderedBroadcast (). Por lo general, varios receptores de transmisión suscritos a este Intent pueden recibir un Intent de transmisión. Esta función es similar a los receptores de mensajes de tema en JMS. Implementar un método de receptor de difusión es el siguiente:

     

    El primer paso: definir el receptor de transmisión, heredar BroadcastReceiver y reescribir el método onReceive ().

    public class IncomingSMSReceiver extensionsBroadcastReceiver {
      @Override public void onReceive (Contextcontext, Intentintent) {
      }
    }

     

    Paso 2: Suscríbete a la transmisión Intención de interés, existen dos métodos de suscripción:

    El primer tipo: use código para suscribirse (suscripción dinámica)

    IntentFilter filter = newIntentFilter ("android.provider.Telephony.SMS_RECEIVED");
    Receptor IncomingSMSReceiver = newIncomingSMSReceiver ();
    registerReceiver (receptor, filtro);

     

    El segundo tipo: Suscríbete en el nodo en el archivo AndroidManifest.xml (suscripción estática)


      
           
      


    Echemos un vistazo a la diferencia entre la suscripción de transmisión dinámica y la suscripción de transmisión estática:
    La transmisión por suscripción estática también se denomina: transmisión residente. Cuando se cierra su aplicación, si hay un mensaje de transmisión, el receptor de transmisión que escribió también puede recibirlo. Su método de registro es AndroidManifast en su aplicación. .xml para suscripción.

     

    La difusión por suscripción dinámica también se denomina difusión no residente. Cuando finalice la aplicación, la transmisión desaparecerá de forma natural. Por ejemplo, te suscribes a la transmisión en onCreate o onResume en la actividad, y debes cancelar la suscripción a la transmisión en onDestory o onPause. De lo contrario, se informará una excepción, por lo que su receptor de transmisión será un no residente.

     

    Hay un detalle más aquí que son los dos métodos de suscripción. Al enviar transmisiones, debe prestar atención a: El método de intención implícita se usa para el registro dinámico, por lo que debe usar la intención implícita para enviar al enviar transmisiones. , De lo contrario, el receptor de transmisión no podrá recibir la transmisión. Preste atención a este punto. Pero cuando se suscribe estáticamente, debido a que está suscrito en AndroidMainfest.xml, es posible usar Display Intent e Intent implícito al enviar transmisiones (por supuesto, esto es solo para receptores de transmisión definidos por nosotros mismos), por lo que, por si acaso, generalmente usamos implícito Intento enviar transmisión.

     

    Veamos un ejemplo:

    Eche un vistazo a la estructura del proyecto:

     

    Eche un vistazo a la transmisión de suscripción estática:
    paquete com.broadcast.demo;

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

    importar com.ejemplo.androidbroadcastdemo.R;

    / **
     * Transmisión de suscripción estática
     * @ autor weijiang204321
     *
     */
    La clase pública StaticRegisterBroadcastActivity extiende la actividad {

    @Anular
    protected void onCreate (Bundle SavedInstanceState) {
    super.onCreate (SavedInstanceState);
    setContentView (R.layout.activity_main);
    Botón btn = (Botón) findViewById (R.id.btn);
    A
    btn.setOnClickListener (nuevo OnClickListener () {
    @Anular
    public void onClick (Ver v) {
    // Use una forma estática para registrar la transmisión, puede usar la intención de visualización para enviar la transmisión
    Intent broadcast = new Intent ("com.broadcast.set.broadcast");
    sendBroadcast (difusión, nulo);
    }
    A
    });
    }
    A
    }


    Suscríbase en AndroidMainfest.xml:



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

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

        <aplicación
            android: allowBackup = "true"
            android: icon = "@ drawable / ic_launcher"
            android: label = "@ string / app_name"
            android: theme = "@ style / AppTheme">
            <actividad
                android: name = "com.broadcast.demo.StaticRegisterBroadcastActivity"
                android: label = "@ string / app_name">
               
                   
                   
               
           
           
           
           
               
                   
               
           
           
           
           
           
               
                   
               
           
           
           
           
               
                   
               
           
           
           
           
           
               
                   
               
           
           
       

    No te preocupes por el resto de contenidos por ahora, como hablaremos más adelante, aquí solo nos centramos en el registro de retransmisiones estáticas


          
               
                   
               
           


    Echemos un vistazo al receptor de la transmisión:

    paquete com.broadcast.receiver;

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

    / **
     * Receptor de radiodifusión
     * @ autor weijiang204321
     *
     */
    UnSortBroadcastReceiver de clase pública extiende BroadcastReceiver {

    @Anular
    public void onReceive (Contexto de contexto, Intención de intención) {
    Log.e ("Intent_Action:", intent.getAction () + "");
    }

    }
    La lógica del método onReceive en el receptor de transmisión es muy simple, que consiste en imprimir el contenido de la Acción.
    Ejecute el programa, el resultado es muy simple, aquí no está la imagen.

     

    Echemos un vistazo a las suscripciones dinámicas:


    paquete com.broadcast.demo;

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

    importar com.broadcast.receiver.UnSortBroadcastReceiver;
    importar com.ejemplo.androidbroadcastdemo.R;

    / **
     * Utilice una forma dinámica de registrar la transmisión
     * @ autor weijiang204321
     *
     */
    La clase pública DynamicRegisterBroadcastActivity extiende la actividad {
    A
    Cadena final estática pública NEW_LIFEFORM_DETECTED = "com.dxz.broadcasttest.NEW_LIFEFORM";
    receptor UnSortBroadcastReceiver protegido;
    A
    @Anular
    protected void onCreate (Bundle SavedInstanceState) {
    super.onCreate (SavedInstanceState);
    setContentView (R.layout.activity_main);
    Botón btn0 = (Botón) findViewById (R.id.btn);
    btn0.setOnClickListener (nuevo OnClickListener () {
    public void onClick (Ver v) {
    // Enviar transmisión
    Intención = nueva intención (NEW_LIFEFORM_DETECTED);
    sendBroadcast (it);
    }
    });
    }

    @Anular
    protected void onResume () {
    super.onResume ();
    // Registrarse para la transmisión
    IntentFilter counterActionFilter = new IntentFilter (NEW_LIFEFORM_DETECTED);
    receptor = nuevo UnSortBroadcastReceiver ();
    registerReceiver (receptor, counterActionFilter);
    }

    @Anular
    protected void onPause () {
    super.onPause ();
    // Cancelar transmisión
    unregisterReceiver (receptor);
    }
    }
    Aquí nos estamos suscribiendo a la transmisión en onResume y cancelando la suscripción a la transmisión en onPause.
    Cambie la actividad iniciada a DynamicRegisterBroadcastActivity en AndroidMainfest.xml. No es necesario modificar el resto del contenido. Ejecutar el programa e imprimir el resultado es muy simple, por lo que no veré la imagen aquí.

     

    Echemos un vistazo a la transmisión ordenada y la transmisión no ordenada.

    Ya lo hemos mencionado al principio, echemos un vistazo a la transmisión desordenada:

    Primero definimos dos receptores de transmisión:

    El primer receptor de transmisión:


    paquete com.broadcast.receiver;

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

    / **
     * Receptor de transmisión A
     * @ autor weijiang204321
     *
     */
    La clase pública SortBroadcastReceiverA extiende BroadcastReceiver {

    @Anular
    public void onReceive (Contexto de contexto, Intención de intención) {
    Log.e ("Demo:", "receptor de transmisión A");
    }

    }
    El segundo receptor de transmisión:

    paquete com.broadcast.receiver;

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

    / **
     * Receptor de radiodifusión B
     * @ autor weijiang204321
     *
     */
    La clase pública SortBroadcastReceiverB extiende BroadcastReceiver {

    @Anular
    public void onReceive (Contexto de contexto, Intención de intención) {
    Log.e ("Demo:", "Transmisión B");
    }

    A
    A
    }


    Suscríbete para transmitir en AndroidMainfest.xml


     
               
                   
               

           

               
                   
               

    resultado de la operación:


    El resultado de la ejecución es un poco extraño. ¿Por qué el receptor B está en la parte delantera y el receptor A en la parte trasera? La razón es que cuando nos suscribimos a la transmisión en AndroidMainfest.xml, establecemos el valor del atributo android: priority en el filtro de intención. Cuanto mayor sea el valor, mayor será la prioridad. , La prioridad del receptor B es 1000, la prioridad del receptor A es 999, por lo que B recibe la transmisión primero y luego A la recibe, pero no hay conexión entre el receptor B y el receptor A, y no puede haber interacción Sí, Debido a que esta es una transmisión fuera de orden y asincrónica, podemos hacer un experimento agregando código al método onReceiver en B:

    abortBroadcast (); // Termina la transmisión de esta transmisión

    resultado de la operación:

     

    Podemos ver el error de aviso, es decir, la transmisión no ordenada no puede terminar la transmisión. De hecho, la terminación es inútil, porque el receptor A todavía recibe la transmisión.

     

    Echemos un vistazo a la transmisión ordenada, el código debe modificarse:

    El primero es al enviar una transmisión:


    Intent broadcast = new Intent ("com.broadcast.set.broadcast");
    sendOrderedBroadcast (difusión, nulo);
    Luego agregue un método para terminar la transmisión en el receptor B:
    abortBroadcast ();

    El otro código no necesita ser modificado, el resultado de la operación:

     

    Solo existe el receptor B, el receptor A no recibe la transmisión, porque la transmisión termina en el receptor B y los receptores posteriores no pueden aceptarla.

    Modifica el siguiente código:

    Destinatario B:


    paquete com.broadcast.receiver;

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

    / **
     * Receptor de radiodifusión B
     * @ autor weijiang204321
     *
     */
    La clase pública SortBroadcastReceiverB extiende BroadcastReceiver {

    @Anular
    public void onReceive (Contexto de contexto, Intención de intención) {
    Log.e ("Demo:", "receptor de transmisión B");
    Bundle bundle = nuevo Bundle ();
    bundle.putString ("next_receiver", "próximo receptor de transmisión");
    setResultExtras (paquete);
    }
    A
    }
    Después de que B recibe la transmisión, almacena algún valor y lo pasa al siguiente receptor.


    Código del receptor A:


    paquete com.broadcast.receive

     

     

     

     

    Una lista de todas pregunta

    Apodo

    Correo electrónico

    Preguntas

    Nuestro otro producto:

    Paquete de equipo de estación de radio FM profesional

     



     

    Solución de IPTV para hoteles

     


      Ingrese el correo electrónico para recibir una sorpresa

      fmuser.org

      es.fmuser.org
      it.fmuser.org
      fr.fmuser.org
      de.fmuser.org
      af.fmuser.org -> Afrikáans
      sq.fmuser.org -> albanés
      ar.fmuser.org -> árabe
      hy.fmuser.org -> Armenio
      az.fmuser.org -> azerbaiyano
      eu.fmuser.org -> Vasco
      be.fmuser.org -> bielorruso
      bg.fmuser.org -> Bulgaria
      ca.fmuser.org -> catalán
      zh-CN.fmuser.org -> chino (simplificado)
      zh-TW.fmuser.org -> Chino (tradicional)
      hr.fmuser.org -> croata
      cs.fmuser.org -> checo
      da.fmuser.org -> danés
      nl.fmuser.org -> Holandés
      et.fmuser.org -> estonio
      tl.fmuser.org -> filipino
      fi.fmuser.org -> finlandés
      fr.fmuser.org -> Francés
      gl.fmuser.org -> gallego
      ka.fmuser.org -> georgiano
      de.fmuser.org -> alemán
      el.fmuser.org -> Griego
      ht.fmuser.org -> criollo haitiano
      iw.fmuser.org -> hebreo
      hi.fmuser.org -> Hindi
      hu.fmuser.org -> Hungarian
      is.fmuser.org -> islandés
      id.fmuser.org -> indonesio
      ga.fmuser.org -> irlandés
      it.fmuser.org -> Italiano
      ja.fmuser.org -> japonés
      ko.fmuser.org -> coreano
      lv.fmuser.org -> letón
      lt.fmuser.org -> Lituania
      mk.fmuser.org -> macedonio
      ms.fmuser.org -> malayo
      mt.fmuser.org -> maltés
      no.fmuser.org -> Noruega
      fa.fmuser.org -> persa
      pl.fmuser.org -> polaco
      pt.fmuser.org -> portugués
      ro.fmuser.org -> Rumano
      ru.fmuser.org -> ruso
      sr.fmuser.org -> serbio
      sk.fmuser.org -> eslovaco
      sl.fmuser.org -> Eslovenia
      es.fmuser.org -> español
      sw.fmuser.org -> Swahili
      sv.fmuser.org -> sueco
      th.fmuser.org -> Tailandés
      tr.fmuser.org -> turco
      uk.fmuser.org -> ucraniano
      ur.fmuser.org -> Urdu
      vi.fmuser.org -> Vietnamita
      cy.fmuser.org -> galés
      yi.fmuser.org -> Yiddish

       
  •  

    FMUSER ¡Transmite video y audio sin cables más fácilmente!

  • Contacto

    Dirección:
    Habitación No.305 Edificio HuiLan No.273 Huanpu Road Guangzhou China 510620

    E-mail:
    [email protected]

    Teléfono / WhatApps:
    +8618078869184

  • Categorías

  • Newsletter

    PRIMER O NOMBRE COMPLETO

    E-mail

  • solución paypal  Western UnionBanco de China
    E-mail:[email protected]   WhatsApp: +8618078869184 Skype: sky198710021 Chatear conmigo
    Los derechos de autor 2006 2020-accionada por el www.fmuser.org

    Contáctenos