„FMUSER Wirless“ perduoda vaizdo ir garso įrašus lengviau!

[apsaugotas el. paštu] „WhatsApp“ +8618078869184
Pasirinkite kalbą

    Išsamus „Android“ transliavimo paaiškinimas

     

    Transliacija skirstoma į du skirtingus tipus: „Normalios transliacijos“ ir „Užsakytos transliacijos“. Įprasta transliacija yra visiškai asinchroninė ir ją gali priimti visi transliacijos imtuvai vienu metu (logiškai). Pranešimų pristatymo efektyvumas yra palyginti didelis, tačiau trūkumas yra tas, kad imtuvas negali perduoti apdorojimo rezultato kitam imtuvui ir jo negalima nutraukti. „Broadcast Intent“ sklaida; tačiau užsakyta transliacija yra pagrįsta imtuvo deklaruotu prioritetu (deklaruota „Android“: ketinimo filtro elemento atributas, kuo didesnis skaičius, tuo didesnis prioritetas, vertės diapazonas: -1000–1000. Taip pat įmanoma iškvieskite objekto „IntentFilter“ elementą „setPriority“ (), kad gavėjas paeiliui gautų transliaciją. Pvz., Jei A lygis yra didesnis nei B, o B lygis yra didesnis nei C, tada transliacija pirmiausia perduodama A, tada B ir galiausiai C. Po to, kai A gauna transliaciją, ji gali saugoti duomenis transliacijoje. Kai transliacija siunčiama B, B gali gauti A saugomus duomenis iš transliacijos.

     

    Context.sendBroadcast ()

       Tai, kas siunčiama, yra įprasta transliacija, ir visi abonentai turi galimybę ją gauti ir apdoroti.

     

    Context.sendOrderedBroadcast ()

       Siuntimas yra tvarkinga transliacija. Sistema imtuvus vykdys po vieną pagal imtuvo deklaruotą prioritetą. Ankstesnis imtuvas turi teisę nutraukti transliaciją (BroadcastReceiver.abortBroadcast ()). Jei transliaciją nutraukia ankstesnis imtuvas, pastarasis imtuvas nebegali gauti transliacijos. Užsakytos transliacijos atveju ankstesnis imtuvas gali išsaugoti apdorojimo rezultatą transliacijos ketinime ir tada perduoti jį kitam imtuvui.

     
    Transliacijos imtuvas (BroadcastReceiver) naudojamas transliavimo ketinimui gauti, o transliacijos ketinimas išsiunčiamas iškviečiant Context.sendBroadcast () ir Context.sendOrderedBroadcast (). Paprastai transliacijos ketinimą gali gauti keli šio ketinimo prenumeruoti transliavimo imtuvai. Ši funkcija yra panaši į JMS „Topic“ pranešimų imtuvus. Transliacijos imtuvo metodas yra toks:

     

    Pirmasis žingsnis: apibrėžkite transliacijos imtuvą, paveldėkite „BroadcastReceiver“ ir perrašykite metodą „onReceive“ ().

    viešoji klasė „IncomingSMSReceiver“ tęsiasi „BroadcastReceiver“ {
      @Paisyti viešo negaliojantį „onReceive“ (kontekstinis kontekstas, ketinimas) {
      }
    }

     

    2 žingsnis: užsiprenumeruokite transliacijos interesą, yra du prenumeratos būdai:

    Pirmasis tipas: naudokite kodą prenumeruodami (dinaminė prenumerata)

    „IntentFilter“ filtras = newIntentFilter ("android.provider.Telephony.SMS_RECEIVED");
    „IncomingSMSReceiver“ imtuvas = newIncomingSMSReceiver ();
    registerReceiver (imtuvas, filtras);

     

    Antrasis tipas: užsiprenumeruokite mazgas faile „AndroidManifest.xml“ (statinė prenumerata)


      
           
      


    Pažvelkime į skirtumą tarp dinaminės transliacijos ir statinės transliacijos prenumeratos:
    Statinė prenumeratos transliacija taip pat vadinama: rezidento transliacija. Uždarius jūsų programą, jei yra transliacijos pranešimas, jūsų gautas transliacijos imtuvas taip pat gali ją gauti. Jūsų registracijos metodas yra „AndroidManifast“ jūsų programoje. .xml prenumeratai.

     

    Dinaminė prenumeratos transliacija taip pat vadinama nerezidentų transliacija. Kai programa baigsis, transliacija natūraliai išnyks. Pavyzdžiui, užsiprenumeruojate transliaciją programoje „onCreate“ arba „onResume“ ir turite atšaukti transliacijos prenumeratą naudodami „onDestory“ arba „onPause“. Kitu atveju bus pranešta apie išimtį, todėl jūsų transliacijos imtuvas bus nerezidentas.

     

    Čia yra dar viena detalė, kuri yra du prenumeratos būdai. Siųsdami transliacijas, turite atkreipti dėmesį į: implicitinio ketinimo metodas naudojamas dinaminei registracijai, todėl siunčiant transliacijas turite naudoti numanomą ketinimą siųsti. , Priešingu atveju transliacijos imtuvas negalės priimti transliacijos. Atkreipkite dėmesį į šį tašką. Bet jei užsiprenumeruojate statiškai, nes jis yra prenumeruojamas „AndroidMainfest.xml“, siunčiant transliacijas galima naudoti „Display Intent“ ir „implicit Intent“ (žinoma, tai taikoma tik mūsų pačių apibrėžtiems imtuvams), todėl tik tuo atveju mes paprastai naudojame Ketina siųsti transliaciją.

     

    Pažvelkime į pavyzdį:

    Pažvelkite į projekto struktūrą:

     

    Pažvelkite į statinio prenumeratos transliaciją:
    paketas com.broadcast.demo;

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

    importuoti com.example.androidbroadcastdemo.R;

    / **
     * Statinė prenumeratos transliacija
     * @autorius weijiang204321
     *
     */
    public class „StaticRegisterBroadcastActivity“ pratęsia veiklą {

    @ Nepaisyti
    apsaugotas negaliojantis onCreate (paketas išsaugotasInstanceState) {
    super.onCreate (savedInstanceState);
    setContentView (R.layout.activity_main);
    Mygtukas btn = (mygtukas) findViewById (R.id.btn);
    Iki
    btn.setOnClickListener (naujas OnClickListener () {
    @ Nepaisyti
    public void onClick (View v) {
    // Naudokite statinį būdą užregistruoti transliaciją, galite naudoti rodymo tikslą transliacijai siųsti
    Intent broadcast = new Intent ("com.broadcast.set.broadcast");
    sendBroadcast (transliacija, niekinis);
    }
    Iki
    });
    }
    Iki
    }


    Prenumeruokite „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" />
       
       
       
       
       
       

        <paraiška
            android: allowBackup = "true"
            android: icon = "@ drawable / ic_launcher"
            android: label = "@ string / app_name"
            android: theme = "@ style / AppTheme">
            <veikla
                android: name = "com.broadcast.demo.StaticRegisterBroadcastActivity"
                android: label = "@ string / app_name">
               
                   
                   
               
           
           
           
           
               
                   
               
           
           
           
           
           
               
                   
               
           
           
           
           
               
                   
               
           
           
           
           
           
               
                   
               
           
           
       

    Kol kas nesijaudinkite dėl kito turinio, apie kurį kalbėsime vėliau, čia daugiausia dėmesio skiriame statinių transliacijų registravimui


          
               
                   
               
           


    Pažvelkime į transliacijos imtuvą:

    paketas com.broadcast.receiver;

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

    / **
     * Transliacijos imtuvas
     * @autorius weijiang204321
     *
     */
    viešoji klasė „UnSortBroadcastReceiver“ pratęsia „BroadcastReceiver“ {

    @ Nepaisyti
    public void onReceive (konteksto kontekstas, ketinimo ketinimas) {
    Log.e ("Intent_Action:", intent.getAction () + "");
    }

    }
    Transliacijos imtuvo metodo „onReceive“ logika yra labai paprasta, ty spausdinti veiksmo turinį.
    Paleiskite programą, rezultatas yra labai paprastas, čia nėra paveikslėlio.

     

    Pažvelkime į dinamines prenumeratas:


    paketas com.broadcast.demo;

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

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

    / **
     * Naudokite dinamišką būdą registruoti transliaciją
     * @autorius weijiang204321
     *
     */
    viešoji klasė „DynamicRegisterBroadcastActivity“ pratęsia veiklą {
    Iki
    viešoji statinė galutinė eilutė NEW_LIFEFORM_DETECTED = "com.dxz.broadcasttest.NEW_LIFEFORM";
    apsaugotas „UnSortBroadcastReceiver“ imtuvas;
    Iki
    @ Nepaisyti
    apsaugotas negaliojantis onCreate (paketas išsaugotasInstanceState) {
    super.onCreate (savedInstanceState);
    setContentView (R.layout.activity_main);
    Mygtukas btn0 = (mygtukas) findViewById (R.id.btn);
    btn0.setOnClickListener (naujas OnClickListener () {
    public void onClick (View v) {
    // Siųsti transliaciją
    Intent it = naujas ketinimas (NEW_LIFEFORM_DETECTED);
    sendBroadcast (it);
    }
    });
    }

    @ Nepaisyti
    apsaugotas negaliojantis onResume () {
    super.onResume ();
    // Registruokitės transliacijai
    IntentFilter counterActionFilter = naujas IntentFilter (NEW_LIFEFORM_DETECTED);
    imtuvas = naujas UnSortBroadcastReceiver ();
    registerReceiver (imtuvas, counterActionFilter);
    }

    @ Nepaisyti
    apsaugotas negaliojantis onPause () {
    super.onPause ();
    // Atšaukti transliaciją
    išregistruoti imtuvą (imtuvą);
    }
    }
    Čia mes užsiprenumeruojame transliaciją „onResume“ ir atsisakome transliacijos „onPause“ prenumeratos.
    „AndroidMainfest.xml“ pakeiskite pradėtą ​​veiklą į „DynamicRegisterBroadcastActivity“. Kito turinio keisti nereikia. Paleiskite programą ir atspausdinkite rezultatą labai paprasta, todėl čia nematysiu nuotraukos.

     

    Pažvelkime į užsakytą transliaciją ir neužsakytą transliaciją

    Mes tai jau minėjome pradžioje, pažvelkime į netvarkingą transliaciją:

    Pirmiausia nustatome du transliavimo imtuvus:

    Pirmasis transliacijos imtuvas:


    paketas com.broadcast.receiver;

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

    / **
     * Transliacijos imtuvas A
     * @autorius weijiang204321
     *
     */
    public class SortBroadcastReceiverA pratęsia BroadcastReceiver {

    @ Nepaisyti
    public void onReceive (konteksto kontekstas, ketinimo ketinimas) {
    „Log.e“ („Demo:“, „transliacijos imtuvas A“);
    }

    }
    Antrasis transliacijos imtuvas:

    paketas com.broadcast.receiver;

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

    / **
     * Transliacijos imtuvas B
     * @autorius weijiang204321
     *
     */
    viešoji klasė „SortBroadcastReceiverB“ pratęsia „BroadcastReceiver“ {

    @ Nepaisyti
    public void onReceive (konteksto kontekstas, ketinimo ketinimas) {
    „Log.e“ („Demo:“, „Transliacija B“);
    }

    Iki
    Iki
    }


    Užsiprenumeruokite transliaciją „AndroidMainfest.xml“


     
               
                   
               

           

               
                   
               

    operacijos rezultatas:


    Bėgimo rezultatas yra šiek tiek keistas. Kodėl imtuvas B yra priekyje ir imtuvas A gale? Priežastis yra ta, kad kai mes užsiprenumeruojame transliaciją „AndroidMainfest.xml“, ketinimo filtre nustatome „android: priority“ atributo vertę. Kuo didesnė vertė, tuo didesnis prioritetas. , Imtuvo B prioritetas yra 1000, imtuvo A prioritetas yra 999, taigi B pirmiausia priima transliaciją, o tada A ją priima, tačiau nėra ryšio tarp imtuvo B ir imtuvo A ir negali būti sąveikos Taip, nes tai yra netinkama transliacija ir asinchroninė, mes galime atlikti eksperimentą, pridėdami kodą prie „onReceiver“ metodo B:

    abortBroadcast (); // Nutraukti šios transliacijos perdavimą

    operacijos rezultatas:

     

    Matome greitą klaidą, tai yra, neužsakyta transliacija neleidžia nutraukti transliacijos. Tiesą sakant, nutraukimas yra nenaudingas, nes imtuvas A vis tiek gauna transliaciją.

     

    Pažvelkime į tvarkingą transliaciją, kodą reikia modifikuoti:

    Pirmasis yra siunčiant transliaciją:


    Intent broadcast = new Intent ("com.broadcast.set.broadcast");
    sendOrderedBroadcast (transliacija, niekinis);
    Tada pridėkite būdą, kaip nutraukti transliaciją B imtuve:
    nutraukti transliaciją ();

    Kito kodo keisti nereikia, operacijos rezultatas:

     

    Yra tik imtuvas B, imtuvas A negauna transliacijos, nes transliacija nutraukiama imtuve B, o paskesni imtuvai negali jos priimti.

    Pakeiskite žemiau esantį kodą:

    B gavėjas:


    paketas com.broadcast.receiver;

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

    / **
     * Transliacijos imtuvas B
     * @autorius weijiang204321
     *
     */
    viešoji klasė „SortBroadcastReceiverB“ pratęsia „BroadcastReceiver“ {

    @ Nepaisyti
    public void onReceive (konteksto kontekstas, ketinimo ketinimas) {
    „Log.e“ („Demo:“, „transliacijos imtuvas B“);
    Paketo paketas = naujas rinkinys ();
    bundle.putString ("kitas_gavėjas", "kitas transliacijos imtuvas");
    setResultExtras (paketas);
    }
    Iki
    }
    Po to, kai B gauna transliaciją, ji išsaugo tam tikrą vertę ir perduoda ją kitam imtuvui.


    Imtuvo A kodas:


    paketas com.broadcast.receive

     

     

     

     

    Išvardyti visas klausimas

    pravardė

    El.pašto adresas*

    klausimai

    Mūsų kitas produktas:

    Profesionalus FM radijo stoties įrangos paketas

     



     

    Viešbučio IPTV sprendimas

     


      Įveskite el. Pašto adresą, kad gautumėte staigmeną

      fmuser.org

      es.fmuser.org
      it.fmuser.org
      fr.fmuser.org
      de.fmuser.org
      af.fmuser.org -> afrikanų kalba
      sq.fmuser.org -> albanų
      ar.fmuser.org -> arabų
      hy.fmuser.org -> armėnas
      az.fmuser.org -> azerbaidžanietis
      eu.fmuser.org -> baskų
      be.fmuser.org -> baltarusių
      bg.fmuser.org -> bulgarų
      ca.fmuser.org -> katalonų
      zh-CN.fmuser.org -> kinų (supaprastinta)
      zh-TW.fmuser.org -> kinų (tradicinė)
      hr.fmuser.org -> kroatų
      cs.fmuser.org -> čekų
      da.fmuser.org -> danų
      nl.fmuser.org -> Olandų
      et.fmuser.org -> estų
      tl.fmuser.org -> filipinietis
      fi.fmuser.org -> suomių
      fr.fmuser.org -> prancūzų
      gl.fmuser.org -> Galisų
      ka.fmuser.org -> gruzinų
      de.fmuser.org -> vokiečių kalba
      el.fmuser.org -> graikų
      ht.fmuser.org -> Haičio kreolis
      iw.fmuser.org -> hebrajų
      hi.fmuser.org -> hindi
      hu.fmuser.org -> vengrų
      is.fmuser.org -> islandų
      id.fmuser.org -> indoneziečių
      ga.fmuser.org -> airių
      it.fmuser.org -> italų kalba
      ja.fmuser.org -> japonų
      ko.fmuser.org -> korėjiečių
      lv.fmuser.org -> latvių
      lt.fmuser.org -> lietuvis
      mk.fmuser.org -> makedonų
      ms.fmuser.org -> malajiečių
      mt.fmuser.org -> maltiečių
      no.fmuser.org -> norvegų
      fa.fmuser.org -> persų
      pl.fmuser.org -> lenkų
      pt.fmuser.org -> portugalų
      ro.fmuser.org -> rumunų
      ru.fmuser.org -> rusų
      sr.fmuser.org -> serbų
      sk.fmuser.org -> slovakų
      sl.fmuser.org -> slovėnų
      es.fmuser.org -> ispanų
      sw.fmuser.org -> svahili kalba
      sv.fmuser.org -> švedų
      th.fmuser.org -> Tailando
      tr.fmuser.org -> turkų
      uk.fmuser.org -> ukrainietis
      ur.fmuser.org -> urdu
      vi.fmuser.org -> vietnamiečių
      cy.fmuser.org -> Valų kalba
      yi.fmuser.org -> jidiš

       
  •  

    „FMUSER Wirless“ perduoda vaizdo ir garso įrašus lengviau!

  • Susisiekite su mumis

    Adresas:
    Nr. 305 kambarys „HuiLan“ pastatas Nr. 273 Huanpu Road Guangdžou, Kinija 510620

    El. paštas:
    [apsaugotas el. paštu]

    Tel. / „WhatApps“:
    +8618078869184

  • Kategorijos

  • Naujienlaiškis

    PIRMAS ARBA VISAS VARDAS

    Elektroninis paštas

  • PayPal sprendimas  Vakarų sąjungaBank of China
    El. paštas:[apsaugotas el. paštu]   „WhatsApp“: +8618078869184 „Skype“: sky198710021 Chat with me
    Autorinės teisės 2006-2020 Powered By www.fmuser.org

    Kontaktai