FMUSER Wireless Video- und Audioübertragung einfacher!

[E-Mail geschützt] WhatsApp + 8618078869184
Sprache

    Detaillierte Erklärung von Broadcast in Android

     

    Broadcasting wird in zwei verschiedene Typen unterteilt: "Normale Broadcasts" und "Bestellte Broadcasts". Normale Sendungen sind vollständig asynchron und können von allen Rundfunkempfängern gleichzeitig (logisch) empfangen werden. Die Effizienz der Nachrichtenübermittlung ist relativ hoch, aber der Nachteil ist, dass der Empfänger das Verarbeitungsergebnis nicht an den nächsten Empfänger weitergeben kann und es nicht beendet werden kann. Broadcast Intent Propagation; Die geordnete Sendung basiert jedoch auf der vom Empfänger deklarierten Priorität (deklariert im Attribut android: priority des Intent-Filter-Elements. Je größer die Zahl, desto höher die Priorität, der Wertebereich: -1000 bis 1000. Dies ist auch der Fall möglich Rufen Sie setPriority () des zu setzenden IntentFilter-Objekts auf, und der Empfänger empfängt die Sendung der Reihe nach. Wenn beispielsweise der Pegel von A höher als der von B ist und der Pegel von B höher als C ist, wird die Sendung zuerst an A, dann an B und schließlich an C übertragen. Nachdem A die Sendung erhalten hat, wird sie gesendet kann Daten in der Sendung speichern. Wenn die Sendung an B gesendet wird, kann B die von A gespeicherten Daten aus der Sendung abrufen.

     

    Context.sendBroadcast ()

       Was gesendet wird, ist eine normale Sendung, und alle Abonnenten haben die Möglichkeit, sie zu erhalten und zu verarbeiten.

     

    Context.sendOrderedBroadcast ()

       Das Senden ist eine ordnungsgemäße Sendung. Das System führt die Empfänger einzeln gemäß der vom Empfänger festgelegten Priorität aus. Der vorherige Empfänger hat das Recht, die Übertragung zu beenden (BroadcastReceiver.abortBroadcast ()). Wenn die Sendung vom vorherigen Empfänger beendet wird, kann der Empfänger die Sendung nicht mehr empfangen. Bei geordneter Übertragung kann der vorherige Empfänger das Verarbeitungsergebnis in der Übertragungsabsicht speichern und es dann an den nächsten Empfänger weiterleiten.

     
    Der Broadcast-Empfänger (BroadcastReceiver) wird zum Empfangen von Broadcast-Absichten verwendet, und das Senden von Broadcast-Absichten wird durch Aufrufen von Context.sendBroadcast () und Context.sendOrderedBroadcast () realisiert. Normalerweise kann eine Broadcast-Absicht von mehreren Broadcast-Empfängern empfangen werden, die diese Absicht abonniert haben. Diese Funktion ähnelt Topic-Nachrichtenempfängern in JMS. Das Implementieren einer Rundfunkempfängermethode ist wie folgt:

     

    Der erste Schritt: Definieren Sie den Broadcast-Empfänger, erben Sie BroadcastReceiver und schreiben Sie die onReceive () -Methode neu.

    öffentliche Klasse IncomingSMSReceiver erweitertBroadcastReceiver {
      @Override public void onReceive (Contextcontext, Intentintent) {
      }
    }

     

    Schritt 2: Abonnieren der Sendung Bei Interesse gibt es zwei Abonnementmethoden:

    Der erste Typ: Verwenden Sie Code zum Abonnieren (dynamisches Abonnement)

    IntentFilter filter = newIntentFilter ("android.provider.Telephony.SMS_RECEIVED");
    IncomingSMSReceiver Empfänger = newIncomingSMSReceiver ();
    registerReceiver (Empfänger, Filter);

     

    Der zweite Typ: Abonnieren in der Knoten in der Datei AndroidManifest.xml (statisches Abonnement)


      
           
      


    Schauen wir uns den Unterschied zwischen einem dynamischen und einem statischen Broadcast-Abonnement an:
    Statische Abonnementübertragung wird auch als residente Übertragung bezeichnet. Wenn Ihre Anwendung geschlossen ist und eine Broadcast-Nachricht vorliegt, kann der von Ihnen geschriebene Broadcast-Empfänger diese auch empfangen. Die Registrierungsmethode ist AndroidManifast in Ihrer Anwendung. .xml für Abonnement.

     

    Dynamische Abonnement-Broadcasts werden auch als nicht residente Broadcasts bezeichnet. Wenn die Anwendung endet, verschwindet die Sendung natürlich. Beispielsweise abonnieren Sie die Sendung in onCreate oder onResume in der Aktivität und müssen das Broadcast-Abonnement in onDestory oder onPause kündigen. Andernfalls wird eine Ausnahme gemeldet, sodass Ihr Rundfunkempfänger nicht ansässig ist.

     

    Es gibt hier ein weiteres Detail, nämlich die beiden Abonnementmethoden. Beim Senden von Broadcasts müssen Sie Folgendes beachten: Die Methode der impliziten Absicht wird für die dynamische Registrierung verwendet. Daher müssen Sie beim Senden von Broadcasts die implizite Absicht zum Senden verwenden. Andernfalls kann der Rundfunkempfänger die Sendung nicht empfangen. Achten Sie auf diesen Punkt. Beim statischen Abonnieren ist es jedoch möglich, beim Senden von Sendungen die Anzeige-Absicht und die implizite Absicht zu verwenden, da diese in AndroidMainfest.xml abonniert ist (dies gilt natürlich nur für von uns selbst definierte Rundfunkempfänger). Daher verwenden wir im Allgemeinen implizit Absicht, eine Sendung zu senden.

     

    Schauen wir uns ein Beispiel an:

    Schauen Sie sich die Projektstruktur an:

     

    Schauen Sie sich die statische Abonnement-Sendung an:
    Paket com.broadcast.demo;

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

    import com.example.androidbroadcastdemo.R;

    / **
     * Statische Abonnementübertragung
     * @autor weijiang204321
     *
     */
    öffentliche Klasse StaticRegisterBroadcastActivity erweitert Activity {

    @Überschreiben
    protected void onCreate (Bundle savedInstanceState) {
    super.onCreate (savedInstanceState);
    setContentView (R.layout.activity_main);
    Button btn = (Button) findViewById (R.id.btn);
    Zu
    btn.setOnClickListener (neuer OnClickListener () {
    @Überschreiben
    public void onClick (View v) {
    // Verwenden Sie eine statische Methode zum Registrieren der Sendung. Sie können die Anzeigeabsicht verwenden, um die Sendung zu senden
    Absichtsübertragung = neue Absicht ("com.broadcast.set.broadcast");
    sendBroadcast (Broadcast, null);
    }
    Zu
    });
    }
    Zu
    }


    Abonnieren Sie in AndroidMainfest.xml:



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

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

        <Anwendung
            android: allowBackup = "true"
            android: icon = "@ drawable / ic_launcher"
            android: label = "@ string / app_name"
            android: theme = "@ style / AppTheme">
            <Aktivität
                android: name = "com.broadcast.demo.StaticRegisterBroadcastActivity"
                android: label = "@ string / app_name">
               
                   
                   
               
           
           
           
           
               
                   
               
           
           
           
           
           
               
                   
               
           
           
           
           
               
                   
               
           
           
           
           
           
               
                   
               
           
           
       

    Machen Sie sich vorerst keine Sorgen um die anderen Inhalte, wie wir später besprechen werden. Hier konzentrieren wir uns nur auf die Registrierung statischer Sendungen


          
               
                   
               
           


    Werfen wir einen Blick auf den Empfänger der Sendung:

    Paket com.broadcast.receiver;

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

    / **
     * Rundfunkempfänger
     * @autor weijiang204321
     *
     */
    öffentliche Klasse UnSortBroadcastReceiver erweitert BroadcastReceiver {

    @Überschreiben
    public void onReceive (Kontextkontext, Absichtserklärung) {
    Log.e ("Intent_Action:", intent.getAction () + "");
    }

    }
    Die Logik der onReceive-Methode im Broadcast-Empfänger ist sehr einfach: Der Inhalt der Aktion wird gedruckt.
    Führen Sie das Programm aus, das Ergebnis ist sehr einfach, hier ist nicht das Bild.

     

    Werfen wir einen Blick auf dynamische Abonnements:


    Paket com.broadcast.demo;

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

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

    / **
     * Verwenden Sie eine dynamische Methode zum Registrieren von Sendungen
     * @autor weijiang204321
     *
     */
    öffentliche Klasse DynamicRegisterBroadcastActivity erweitert Activity {
    Zu
    public static final String NEW_LIFEFORM_DETECTED = "com.dxz.broadcasttest.NEW_LIFEFORM";
    geschützter UnSortBroadcastReceiver-Empfänger;
    Zu
    @Überschreiben
    protected void onCreate (Bundle savedInstanceState) {
    super.onCreate (savedInstanceState);
    setContentView (R.layout.activity_main);
    Button btn0 = (Button) findViewById (R.id.btn);
    btn0.setOnClickListener (neuer OnClickListener () {
    public void onClick (View v) {
    // Sendung senden
    Intent it = new Intent (NEW_LIFEFORM_DETECTED);
    sendBroadcast (it);
    }
    });
    }

    @Überschreiben
    protected void onResume () {
    super.onResume ();
    // Zur Ausstrahlung registrieren
    IntentFilter counterActionFilter = neuer IntentFilter (NEW_LIFEFORM_DETECTED);
    Empfänger = neuer UnSortBroadcastReceiver ();
    registerReceiver (Empfänger, counterActionFilter);
    }

    @Überschreiben
    protected void onPause () {
    super.onPause ();
    // Sendung abbrechen
    unregisterReceiver (Empfänger);
    }
    }
    Hier abonnieren wir die Übertragung in onResume und die Übertragung in onPause.
    Ändern Sie die gestartete Aktivität in DynamicRegisterBroadcastActivity in AndroidMainfest.xml. Der andere Inhalt muss nicht geändert werden. Führen Sie das Programm aus und drucken Sie das Ergebnis ist sehr einfach, so dass ich das Bild hier nicht sehen werde.

     

    Werfen wir einen Blick auf geordnete und ungeordnete Sendungen

    Wir haben dies bereits zu Beginn erwähnt. Schauen wir uns den ungeordneten Rundfunk an:

    Zuerst definieren wir zwei Rundfunkempfänger:

    Der erste Rundfunkempfänger:


    Paket com.broadcast.receiver;

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

    / **
     * Rundfunkempfänger A.
     * @autor weijiang204321
     *
     */
    öffentliche Klasse SortBroadcastReceiverA erweitert BroadcastReceiver {

    @Überschreiben
    public void onReceive (Kontextkontext, Absichtserklärung) {
    Log.e ("Demo:", "Rundfunkempfänger A");
    }

    }
    Der zweite Rundfunkempfänger:

    Paket com.broadcast.receiver;

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

    / **
     * Rundfunkempfänger B.
     * @autor weijiang204321
     *
     */
    öffentliche Klasse SortBroadcastReceiverB erweitert BroadcastReceiver {

    @Überschreiben
    public void onReceive (Kontextkontext, Absichtserklärung) {
    Log.e ("Demo:", "Broadcast B");
    }

    Zu
    Zu
    }


    Abonnieren Sie die Sendung in AndroidMainfest.xml


     
               
                   
               

           

               
                   
               

    Betriebsergebnis:


    Das laufende Ergebnis ist etwas seltsam. Warum ist Empfänger B vorne und Empfänger A hinten? Der Grund dafür ist, dass wir beim Abonnieren der Sendung in AndroidMainfest.xml den Attributwert android: priority im Intent-Filter festlegen. Je größer der Wert, desto höher die Priorität. Die Priorität von Empfänger B ist 1000, die Priorität von Empfänger A ist 999, also empfängt B zuerst die Sendung und dann A, aber es besteht keine Verbindung zwischen Empfänger B und Empfänger A, und es kann keine Interaktion geben. Ja, Da es sich um eine nicht ordnungsgemäße und asynchrone Übertragung handelt, können wir ein Experiment durchführen, indem wir der onReceiver-Methode in B Code hinzufügen:

    abortBroadcast (); // Beendet die Übertragung dieser Sendung

    Betriebsergebnis:

     

    Wir können den Eingabeaufforderungsfehler sehen, dh, eine nicht geordnete Sendung darf die Sendung nicht beenden. Tatsächlich ist die Beendigung nutzlos, da Empfänger A die Sendung weiterhin empfängt.

     

    Werfen wir einen Blick auf die ordnungsgemäße Ausstrahlung. Der Code muss geändert werden:

    Das erste ist beim Senden einer Sendung:


    Absichtsübertragung = neue Absicht ("com.broadcast.set.broadcast");
    sendOrderedBroadcast (Broadcast, null);
    Fügen Sie dann eine Methode hinzu, um die Übertragung im B-Empfänger zu beenden:
    abortBroadcast ();

    Der andere Code muss nicht geändert werden, das Operationsergebnis:

     

    Es gibt nur Empfänger B, Empfänger A empfängt die Sendung nicht, da die Sendung in Empfänger B beendet ist und die nachfolgenden Empfänger sie nicht akzeptieren können.

    Ändern Sie den folgenden Code:

    Empfänger B:


    Paket com.broadcast.receiver;

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

    / **
     * Rundfunkempfänger B.
     * @autor weijiang204321
     *
     */
    öffentliche Klasse SortBroadcastReceiverB erweitert BroadcastReceiver {

    @Überschreiben
    public void onReceive (Kontextkontext, Absichtserklärung) {
    Log.e ("Demo:", "Rundfunkempfänger B");
    Bundle Bundle = neues Bundle ();
    bundle.putString ("next_receiver", "nächster Rundfunkempfänger");
    setResultExtras (Bundle);
    }
    Zu
    }
    Nachdem B die Sendung empfangen hat, speichert es einen Wert und leitet ihn an den nächsten Empfänger weiter.


    Code von Empfänger A:


    Paket com.broadcast.receive

     

     

     

     

    Alle auflisten Frage

    Nickname

    E-Mail

    Fragen

    Unsere anderen Produkt:

    Professionelles UKW-Radiosender-Ausrüstungspaket

     



     

    IPTV-Lösung für Hotels

     


      Geben Sie eine E-Mail-Adresse ein, um eine Überraschung zu erhalten

      fmuser.org

      es.fmuser.org
      it.fmuser.org
      fr.fmuser.org
      de.fmuser.org
      af.fmuser.org -> Afrikaans
      sq.fmuser.org -> Albanisch
      ar.fmuser.org -> Arabisch
      hy.fmuser.org -> Armenisch
      az.fmuser.org -> Aserbaidschanisch
      eu.fmuser.org -> Baskisch
      be.fmuser.org -> Weißrussisch
      bg.fmuser.org -> Bulgarisch
      ca.fmuser.org -> Katalanisch
      zh-CN.fmuser.org -> Chinesisch (vereinfacht)
      zh-TW.fmuser.org -> Chinesisch (traditionell)
      hr.fmuser.org -> Kroatisch
      cs.fmuser.org -> Tschechisch
      da.fmuser.org -> Dänisch
      nl.fmuser.org -> Niederländisch
      et.fmuser.org -> Estnisch
      tl.fmuser.org -> Philippinisch
      fi.fmuser.org -> Finnisch
      fr.fmuser.org -> Französisch
      gl.fmuser.org -> Galizisch
      ka.fmuser.org -> Georgisch
      de.fmuser.org -> Deutsch
      el.fmuser.org -> Griechisch
      ht.fmuser.org -> Haitianisches Kreol
      iw.fmuser.org -> Hebräisch
      hi.fmuser.org -> Hindi
      hu.fmuser.org -> Ungarisch
      is.fmuser.org -> Isländisch
      id.fmuser.org -> Indonesisch
      ga.fmuser.org -> Irisch
      it.fmuser.org -> Italienisch
      ja.fmuser.org -> Japanisch
      ko.fmuser.org -> Koreanisch
      lv.fmuser.org -> Lettisch
      lt.fmuser.org -> Litauisch
      mk.fmuser.org -> Mazedonisch
      ms.fmuser.org -> Malaiisch
      mt.fmuser.org -> Malteser
      no.fmuser.org -> Norwegisch
      fa.fmuser.org -> Persisch
      pl.fmuser.org -> Polnisch
      pt.fmuser.org -> Portugiesisch
      ro.fmuser.org -> Rumänisch
      ru.fmuser.org -> Russisch
      sr.fmuser.org -> Serbisch
      sk.fmuser.org -> Slowakisch
      sl.fmuser.org -> Slowenisch
      es.fmuser.org -> Spanisch
      sw.fmuser.org -> Suaheli
      sv.fmuser.org -> Schwedisch
      th.fmuser.org -> Thai
      tr.fmuser.org -> Türkisch
      uk.fmuser.org -> Ukrainisch
      ur.fmuser.org -> Urdu
      vi.fmuser.org -> Vietnamesisch
      cy.fmuser.org -> Walisisch
      yi.fmuser.org -> Jiddisch

       
  •  

    FMUSER Wireless Video- und Audioübertragung einfacher!

  • Kontakt

    Adresse
    Nr.305 Zimmer HuiLan Gebäude Nr.273 Huanpu Road Guangzhou China 510620

    E-Mail:
    [E-Mail geschützt]

    Telefon / WhatApps:
    +8618078869184

  • Kategorien

  • Newsletter

    ERSTER ODER VOLLSTÄNDIGER NAME

    E-Mail

  • paypal Lösung  Western UnionBank von China
    E-Mail:[E-Mail geschützt]    WhatsApp: +8618078869184 Skype: sky198710021 Rede mit mir
    Copyright 2006-2020 Powered By www.fmuser.org

    Kontakt