FMUSER Bezdrátový přenos videa a zvuku snadnější!

[chráněno e-mailem] WhatsApp + 8618078869184
Jazyk

    Podrobné vysvětlení vysílání v systému Android

     

    Vysílání je rozděleno do dvou různých typů: „Normální vysílání“ a „Objednané vysílání“. Obyčejné vysílání je zcela asynchronní a může být přijímáno všemi rozhlasovými přijímači současně (logicky). Účinnost doručování zpráv je relativně vysoká, ale nevýhodou je, že příjemce nemůže předat výsledek zpracování dalšímu příjemci a nelze jej ukončit. Šíření záměru vysílání; objednané vysílání je však založeno na prioritě deklarované přijímačem (deklarováno v atributu android: priority prvku filtru záměru, čím větší je číslo, tím vyšší je priorita, rozsah hodnot: -1000 až 1000. Je také možné Zavolejte setPriority () objektu IntentFilter, který chcete nastavit) a příjemce postupně obdrží vysílání. Například pokud je úroveň A vyšší než úroveň B a úroveň B je vyšší než C, pak se vysílání nejprve vysílá do A, poté do B a nakonec do C. Poté, co A dostane vysílání, může ukládat data do vysílání. Když je vysílání odesláno do B, může B z vysílání dostat data uložená A.

     

    Context.sendBroadcast ()

       Odesílá se běžné vysílání a všichni předplatitelé mají možnost jej získat a zpracovat.

     

    Context.sendOrderedBroadcast ()

       Odesílání je řádné vysílání. Systém provede přijímače jeden po druhém podle priority deklarované přijímačem. Předchozí příjemce má právo ukončit vysílání (BroadcastReceiver.abortBroadcast ()). Pokud je vysílání ukončeno předchozím přijímačem, druhý přijímač již nemůže přijímat vysílání. U objednaného vysílání může předchozí přijímač uložit výsledek zpracování do Intentu vysílání a poté jej předat dalšímu přijímači.

     
    Přijímač vysílání (BroadcastReceiver) se používá k příjmu Intent vysílání a odesílání Intent vysílání se uskutečňuje voláním Context.sendBroadcast () a Context.sendOrderedBroadcast (). Vysílací záměr může být obvykle přijat několika vysílacími přijímači přihlášenými k tomuto záměru. Tato funkce je podobná přijímačům tématických zpráv v JMS. Implementace metody přijímače vysílání je následující:

     

    První krok: definovat přijímač vysílání, zdědit BroadcastReceiver a přepsat metodu onReceive ().

    veřejná třída IncomingSMSReceiver extendsBroadcastReceiver {
      @Override public void onReceive (Contextcontext, Intentintent) {
      }
    }

     

    Krok 2: Přihlaste se k odběru vysílaného zájmového záměru, existují dvě metody předplatného:

    První typ: k přihlášení k odběru použijte kód (dynamické předplatné)

    Filtr IntentFilter = newIntentFilter ("android.provider.Telephony.SMS_RECEIVED");
    Přijímač IncomingSMSReceiver = newIncomingSMSReceiver ();
    registerReceiver (přijímač, filtr);

     

    Druhý typ: Přihlásit se k odběru v uzel v souboru AndroidManifest.xml (statické předplatné)


      
           
      


    Pojďme se podívat na rozdíl mezi předplatným dynamického vysílání a předplatným statického vysílání:
    Statické předplatné vysílání se také nazývá: rezidentní vysílání. Když je vaše aplikace zavřená, je-li k dispozici vysílaná zpráva, může ji přijmout i vysílaný přijímač, který jste napsali. Jeho metoda registrace je AndroidManifast ve vaší aplikaci. XML pro předplatné.

     

    Dynamické vysílání předplatného se také nazývá: nerezidentní vysílání. Když aplikace skončí, vysílání přirozeně zmizí. Například se přihlásíte k odběru vysílání v onCreate nebo onResume v aktivitě a musíte zrušit předplatné vysílání v onDestory nebo onPause. Jinak bude nahlášena výjimka, takže váš vysílací přijímač bude nerezidentem.

     

    Zde je ještě jeden detail, kterým jsou dvě metody předplatného. Při odesílání vysílání musíte věnovat pozornost: Metoda implicitního záměru se používá pro dynamickou registraci, takže při odesílání vysílání musíte použít implicitní záměr. , Jinak přijímač vysílání nebude schopen přijímat vysílání. Věnujte pozornost tomuto bodu. Ale když se přihlásíte k odběru staticky, protože je přihlášen k odběru v AndroidMainfest.xml, je možné při odesílání vysílání použít display Intent a implicit Intent (samozřejmě je to jen pro námi definované přijímače vysílání), takže pro každý případ obecně používáme implicitní Záměr odeslat vysílání.

     

    Podívejme se na příklad:

    Podívejte se na strukturu projektu:

     

    Podívejte se na vysílání statického předplatného:
    balíček com.broadcast.demo;

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

    importovat com.example.androidbroadcastdemo.R;

    / **
     * Statické předplatné vysílání
     * @autor weijiang204321
     *
     */
    veřejná třída StaticRegisterBroadcastActivity rozšiřuje aktivitu {

    @ Přepis
    protected void onCreate (Bundle savedInstanceState) {
    super.onCreate (savedInstanceState);
    setContentView (R.layout.activity_main);
    Tlačítko btn = (Tlačítko) findViewById (R.id.btn);
    Na
    btn.setOnClickListener (nový OnClickListener () {
    @ Přepis
    public void onClick (Zobrazit v) {
    // Použijte statický způsob registrace vysílání, k odeslání vysílání můžete použít záměr zobrazení
    Záměr vysílání = nový záměr ("com.broadcast.set.broadcast");
    sendBroadcast (broadcast, null);
    }
    Na
    });
    }
    Na
    }


    Přihlaste se k odběru v AndroidMainfest.xml:



    <manifest xmlns:android="
    http://schemas.android.com/apk/res/android"
        balíček = "com.example.androidbroadcastdemo"
        android: versionCode = "1"
        Android: versionName = "1.0">

        <používá-sdk
            android: minSdkVersion = "8"
            android: targetSdkVersion = "18" />
       
       
       
       
       
       

        <aplikace
            Android: allowBackup = "true"
            android: icon = "@ drawable / ic_launcher"
            Android: label = "@ řetězec / název_aplikace"
            android: theme = "@ style / AppTheme">
            <aktivita
                Android: name = "com.broadcast.demo.StaticRegisterBroadcastActivity"
                android: label = "@ řetězec / název_aplikace">
               
                   
                   
               
           
           
           
           
               
                   
               
           
           
           
           
           
               
                   
               
           
           
           
           
               
                   
               
           
           
           
           
           
               
                   
               
           
           
       

    Prozatím si nedělejte starosti s dalším obsahem, o čemž budeme hovořit později, zde se zaměříme pouze na registraci statického vysílání


          
               
                   
               
           


    Pojďme se podívat na příjemce vysílání:

    balíček com.broadcast.receiver;

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

    / **
     * Přijímač vysílání
     * @autor weijiang204321
     *
     */
    public class UnSortBroadcastReceiver rozšiřuje BroadcastReceiver {

    @ Přepis
    public void onReceive (kontextový kontext, záměr záměr) {
    Log.e ("Intent_Action:", intent.getAction () + "");
    }

    }
    Logika v metodě onReceive ve vysílacím přijímači je velmi jednoduchá, což je tisk obsahu Akce.
    Spusťte program, výsledek je velmi jednoduchý, zde není obrázek.

     

    Pojďme se podívat na dynamická předplatná:


    balíček com.broadcast.demo;

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

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

    / **
     * Použijte dynamický způsob registrace vysílání
     * @autor weijiang204321
     *
     */
    veřejná třída DynamicRegisterBroadcastActivity rozšiřuje aktivitu {
    Na
    public static final String NEW_LIFEFORM_DETECTED = "com.dxz.broadcasttest.NEW_LIFEFORM";
    chráněný přijímač UnSortBroadcastReceiver;
    Na
    @ Přepis
    protected void onCreate (Bundle savedInstanceState) {
    super.onCreate (savedInstanceState);
    setContentView (R.layout.activity_main);
    Tlačítko btn0 = (Tlačítko) findViewById (R.id.btn);
    btn0.setOnClickListener (nový OnClickListener () {
    public void onClick (Zobrazit v) {
    // Odeslat vysílání
    Intent it = nový záměr (NEW_LIFEFORM_DETECTED);
    sendBroadcast (it);
    }
    });
    }

    @ Přepis
    protected void onResume () {
    super.onResume ();
    // Zaregistrujte se k vysílání
    IntentFilter counterActionFilter = nový IntentFilter (NEW_LIFEFORM_DETECTED);
    přijímač = nový UnSortBroadcastReceiver ();
    registerReceiver (přijímač, counterActionFilter);
    }

    @ Přepis
    Protected Void onPause () {
    super.onPause ();
    // Zrušit vysílání
    unregisterReceiver (přijímač);
    }
    }
    Zde se přihlašujeme k odběru vysílání v onResume a odhlašujeme odběr v onPause.
    Změňte spuštěnou aktivitu na DynamicRegisterBroadcastActivity v AndroidMainfest.xml. Ostatní obsah není nutné upravovat. Spusťte program a výsledek je velmi jednoduchý, takže zde neuvidím obrázek.

     

    Pojďme se podívat na objednané vysílání a neuspořádané vysílání

    Již jsme to zmínili na začátku, pojďme se podívat na neuspořádané vysílání:

    Nejprve definujeme dva vysílací přijímače:

    První přijímač vysílání:


    balíček com.broadcast.receiver;

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

    / **
     * Přijímač vysílání A
     * @autor weijiang204321
     *
     */
    veřejná třída SortBroadcastReceiverA rozšiřuje BroadcastReceiver {

    @ Přepis
    public void onReceive (kontextový kontext, záměr záměr) {
    Log.e ("Ukázka:", "vysílací přijímač A");
    }

    }
    Druhý přijímač vysílání:

    balíček com.broadcast.receiver;

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

    / **
     * Přijímač vysílání B
     * @autor weijiang204321
     *
     */
    veřejná třída SortBroadcastReceiverB rozšiřuje BroadcastReceiver {

    @ Přepis
    public void onReceive (kontextový kontext, záměr záměr) {
    Log.e ("Ukázka:", "Vysílání B");
    }

    Na
    Na
    }


    Přihlaste se k odběru vysílání v souboru AndroidMainfest.xml


     
               
                   
               

           

               
                   
               

    výsledek operace:


    Průběžný výsledek je trochu divný. Proč je přijímač B vpředu a přijímač A vzadu? Důvodem je to, že když se přihlásíme k odběru vysílání v souboru AndroidMainfest.xml, nastavíme hodnotu atributu android: priority ve filtru záměru. Čím větší hodnota, tím vyšší priorita. , Priorita přijímače B je 1000, priorita přijímače A je 999, takže B přijímá vysílání jako první a poté A přijímá, ale mezi přijímačem B a přijímačem A není žádné spojení a nemůže docházet k žádné interakci. protože se jedná o vysílání mimo pořadí a asynchronní, můžeme provést experiment přidáním kódu k metodě onReceiver v B:

    abortBroadcast (); // Ukončí přenos tohoto vysílání

    výsledek operace:

     

    Vidíme rychlou chybu, tj. Neobjednané vysílání nesmí vysílání ukončit. Ve skutečnosti je ukončení k ničemu, protože přijímač A stále přijímá vysílání.

     

    Pojďme se podívat na řádné vysílání, kód je třeba upravit:

    První je při odesílání vysílání:


    Záměr vysílání = nový záměr ("com.broadcast.set.broadcast");
    sendOrderedBroadcast (broadcast, null);
    Poté přidejte metodu pro ukončení vysílání v přijímači B:
    abortBroadcast ();

    Druhý kód není nutné upravovat, výsledek operace:

     

    Existuje pouze přijímač B, přijímač A nepřijímá vysílání, protože vysílání je ukončeno v přijímači B a následující přijímači jej nemohou přijmout.

    Upravte níže uvedený kód:

    Příjemce B:


    balíček com.broadcast.receiver;

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

    / **
     * Přijímač vysílání B
     * @autor weijiang204321
     *
     */
    veřejná třída SortBroadcastReceiverB rozšiřuje BroadcastReceiver {

    @ Přepis
    public void onReceive (kontextový kontext, záměr záměr) {
    Log.e ("Ukázka:", "vysílací přijímač B");
    Bundle bundle = nový Bundle ();
    bundle.putString ("next_receiver", "next broadcast receiver");
    setResultExtras (svazek);
    }
    Na
    }
    Poté, co B přijme vysílání, uloží určitou hodnotu a předá ji dalšímu přijímači.


    Kód přijímače A:


    balíček com.broadcast.receive

     

     

     

     

    Seznamu Všechny Otázka

    Přezdívka

    email

    otázky

    Náš další produkt:

    Profesionální balíček vybavení FM rozhlasové stanice

     



     

    Hotelové řešení IPTV

     


      Zadejte e-mail a získejte překvapení

      fmuser.org

      es.fmuser.org
      it.fmuser.org
      fr.fmuser.org
      de.fmuser.org
      af.fmuser.org -> afrikánština
      sq.fmuser.org -> albánština
      ar.fmuser.org -> arabština
      hy.fmuser.org -> Arménský
      az.fmuser.org -> Ázerbájdžánština
      eu.fmuser.org -> baskičtina
      be.fmuser.org -> běloruský
      bg.fmuser.org -> Bulgarian
      ca.fmuser.org -> Katalánština
      zh-CN.fmuser.org -> čínština (zjednodušená)
      zh-TW.fmuser.org -> Čínsky (zjednodušeně)
      hr.fmuser.org -> chorvatština
      cs.fmuser.org -> čeština
      da.fmuser.org -> dánština
      nl.fmuser.org -> Dutch
      et.fmuser.org -> estonština
      tl.fmuser.org -> filipínský
      fi.fmuser.org -> finština
      fr.fmuser.org -> French
      gl.fmuser.org -> galicijština
      ka.fmuser.org -> gruzínština
      de.fmuser.org -> němčina
      el.fmuser.org -> Greek
      ht.fmuser.org -> haitská kreolština
      iw.fmuser.org -> hebrejština
      hi.fmuser.org -> hindština
      hu.fmuser.org -> Hungarian
      is.fmuser.org -> islandština
      id.fmuser.org -> Indonéština
      ga.fmuser.org -> Irština
      it.fmuser.org -> Italian
      ja.fmuser.org -> japonština
      ko.fmuser.org -> korejština
      lv.fmuser.org -> lotyština
      lt.fmuser.org -> Litevština
      mk.fmuser.org -> makedonština
      ms.fmuser.org -> Malajština
      mt.fmuser.org -> maltština
      no.fmuser.org -> Norwegian
      fa.fmuser.org -> perština
      pl.fmuser.org -> polština
      pt.fmuser.org -> portugalština
      ro.fmuser.org -> Rumunština
      ru.fmuser.org -> ruština
      sr.fmuser.org -> srbština
      sk.fmuser.org -> slovenština
      sl.fmuser.org -> Slovinština
      es.fmuser.org -> španělština
      sw.fmuser.org -> svahilština
      sv.fmuser.org -> švédština
      th.fmuser.org -> Thai
      tr.fmuser.org -> turečtina
      uk.fmuser.org -> ukrajinština
      ur.fmuser.org -> urdština
      vi.fmuser.org -> Vietnamská
      cy.fmuser.org -> velština
      yi.fmuser.org -> Jidiš

       
  •  

    FMUSER Bezdrátový přenos videa a zvuku snadnější!

  • Kontakt

    Adresa:
    Budova č. 305 Room HuiLan No.273 Huanpu Road Guangzhou Čína 510620

    E-mail:
    [chráněno e-mailem]

    Tel / WhatApps:
    +8618078869184

  • Kategorie

  • Newsletter

    PRVNÍ NEBO CELÉ JMÉNO

    E-mail

  • řešení paypal  západní unieBank of China
    E-mail:[chráněno e-mailem]   WhatsApp: +8618078869184 Skype: sky198710021 Chatuj se mnou
    Copyright 2006 2020-Powered By www.fmuser.org

    Kontaktujte nás