FMUSER Wirless stuur video en klank makliker toe!

[e-pos beskerm] WhatsApp + 8618078869184
Taalvoorkeur

    Gedetailleerde uiteensetting van Broadcast in Android

     

    Uitsaai is in twee verskillende soorte verdeel: "Normale uitsendings" en "Bestelde uitsendings". Gewone uitsendings is heeltemal asinchroon en kan gelyktydig (logies) deur alle uitsaai-ontvangers ontvang word. Die doeltreffendheid van die aflewering van boodskappe is relatief hoog, maar die nadeel is dat die ontvanger nie die verwerkingsresultaat aan die volgende ontvanger kan oordra nie, en dat dit nie beëindig kan word nie. Uitsending Voortplanting van voorneme; die bestelde uitsending is egter gebaseer op die prioriteit wat deur die ontvanger verklaar word (in die Android-verklaring: prioriteitskenmerk van die opset-filter-element, hoe groter die getal, hoe hoër die prioriteit, die waardebereik: -1000 tot 1000. Dit is ook moontlik Bel die setPriority () van die IntentFilter-objek om in te stel), en die ontvanger ontvang die uitsending op sy beurt. As die vlak van A byvoorbeeld hoër is as die van B, en die vlak van B hoër is as C, dan word die uitsending eers na A gestuur, dan na B en uiteindelik na C. Nadat A die uitsending gekry het, word dit kan data in die uitsending stoor. Wanneer die uitsending na B gestuur word, kan B die data wat A gestoor het, van die uitsending kry.

     

    Context.sendBroadcast ()

       Wat gestuur word, is 'n gewone uitsending, en alle intekenare het die geleentheid om dit te bekom en te verwerk.

     

    Context.sendOrderedBroadcast ()

       Stuur is 'n ordelike uitsending. Die stelsel sal die ontvangers een vir een uitvoer volgens die prioriteit wat deur die ontvanger verklaar word. Die vorige ontvanger het die reg om die uitsending te beëindig (BroadcastReceiver.abortBroadcast ()). As die uitsending deur die vorige ontvanger beëindig word, kan laasgenoemde die ontvanger nie meer die uitsending kry nie. Vir bestelde uitsending kan die vorige ontvanger die verwerkingsresultaat in die uitsendingvoorneme stoor en dit dan aan die volgende ontvanger oordra.

     
    Uitsaai-ontvanger (BroadcastReceiver) word gebruik om uitsending-voorneme te ontvang, en die uitsending van uitsending-voorneme word gerealiseer deur Context.sendBroadcast () en Context.sendOrderedBroadcast () te skakel. Gewoonlik kan 'n uitsendingvoorneme ontvang word deur verskeie uitsaaigroepe wat op hierdie voorneme ingeteken is. Hierdie funksie is soortgelyk aan ontvangers van onderwerpboodskappe in JMS. Die implementering van 'n uitsaaimonster-metode is soos volg:

     

    Die eerste stap: definieer die uitsaaier, ontvang BroadcastReceiver en skryf die onReceive () -metode oor.

    openbare klas Inkomende SMS Ontvanger brei Uitsending Ontvanger {
      @Override publieke leemte onReceive (Contextcontext, Intentintent) {
      }
    }

     

    Stap 2: Teken in op die uitsending Daar is twee inskrywingsmetodes vir belangstelling:

    Die eerste tipe: gebruik kode om in te teken (dinamiese intekening)

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

     

    Die tweede tipe: Teken in op die knoop in die AndroidManifest.xml-lêer (statiese intekening)


      
           
      


    Kom ons kyk na die verskil tussen inskrywing vir dinamiese uitsendings en intekenare vir statiese uitsendings:
    Statiese inskrywing word ook genoem: inwoner-uitsending. As u aansoek gesluit is, en as daar 'n uitsaaiboodskap is, kan die uitsaaier wat u geskryf het, dit ook ontvang. Die registrasiemetode is AndroidManifast in u aansoek. .xml vir intekening.

     

    Uitsending van dinamiese intekeninge word ook genoem: nie-inwoner-uitsending. Wanneer die aansoek beëindig word, sal die uitsending natuurlik verdwyn. U teken byvoorbeeld in vir die uitsending in onCreate of onResume in die aktiwiteit en u moet die uitsaaibonnement in OnDestory of onPause kanselleer. Andersins sal 'n uitsondering gerapporteer word, dus sal u uitsaaier nie 'n inwoner wees nie.

     

    Hier is nog twee besonderhede, naamlik die twee inskrywingsmetodes. Wanneer u uitsendings stuur, moet u let op: Die metode van implisiete opset word gebruik vir dinamiese registrasie, dus moet u implisiete opset gebruik om te stuur wanneer u uitsendings stuur. , Andersins kan die uitsaaier nie die uitsending ontvang nie. Let op hierdie punt. Maar as u staties inteken, omdat dit ingeteken is op AndroidMainfest.xml, is dit moontlik om 'n voorstelling en implisiete voorneme te gebruik wanneer u uitsendings stuur (dit is natuurlik slegs vir uitsaai-ontvangers wat deur ons self gedefinieër is) Voorneme om uitsending te stuur.

     

    Kom ons kyk na 'n voorbeeld:

    Kyk na die projekstruktuur:

     

    Kyk na die statiese intekenaaruitsending:
    pakket com.broadcast.demo;

    invoer android.app.Activity;
    invoer android.content.Intent;
    invoer android.os.Bundle;
    invoer android.view.View;
    voer android.view.View.OnClickListener in;
    voer android.widget.Button in;

    invoer com.example.androidbroadcastdemo.R;

    / **
     * Statiese intekening-uitsending
     * @ outeur weijiang204321
     *
     */
    openbare klas StaticRegisterBroadcastActivity brei aktiwiteit uit {

    @Oorskryf
    beskermde leemte onCreate (Bundel savedInstanceState) {
    super.onCreate (savedInstanceState);
    setContentView (R.layout.activity_main);
    Button btn = (Button) findViewById (R.id.btn);
    om
    btn.setOnClickListener (nuwe OnClickListener () {
    @Oorskryf
    openbare leemte onClick (View v) {
    // Gebruik 'n statiese manier om die uitsending te registreer; u kan die vertoonintensie gebruik om die uitsending te stuur
    Bedoelde uitsending = nuwe voorneme ("com.broadcast.set.broadcast");
    sendBroadcast (uitsending, nul);
    }
    om
    });
    }
    om
    }


    Teken in op AndroidMainfest.xml:



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

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

        <toepassing
            android: allowBackup = "waar"
            android: icon = "@ drawable / ic_launcher"
            android: label = "@ string / app_name"
            android: tema = "@ style / AppTheme">
            <aktiwiteit
                android: name = "com.broadcast.demo.StaticRegisterBroadcastActivity"
                android: label = "@ string / app_name">
               
                   
                   
               
           
           
           
           
               
                   
               
           
           
           
           
           
               
                   
               
           
           
           
           
               
                   
               
           
           
           
           
           
               
                   
               
           
           
       

    Moenie vir eers bekommerd wees oor die ander inhoud nie, soos ons later sal bespreek, hier fokus ons slegs op die registrasie van statiese uitsendings


          
               
                   
               
           


    Kom ons kyk na die ontvanger van die uitsending:

    pakket com.broadcast.receiver;

    invoer android.content.BroadcastReceiver;
    voer Android.content.Context in;
    invoer android.content.Intent;
    invoer android.util.Log;

    / **
     * Uitsaai-ontvanger
     * @ outeur weijiang204321
     *
     */
    openbare klas UnSortBroadcastReceiver brei BroadcastReceiver uit {

    @Oorskryf
    openbare leemte op Ontvang (kontekskonteks, bedoeling van voorneme) {
    Log.e ("Intent_Action:", intention.getAction () + "");
    }

    }
    Die logika in die onReceive-metode in die uitsaaier is baie eenvoudig, naamlik om die inhoud van die aksie af te druk.
    Begin die program, die resultaat is baie eenvoudig, hier is nie die prentjie nie.

     

    Kom ons kyk na dinamiese intekeninge:


    pakket com.broadcast.demo;

    invoer android.app.Activity;
    invoer android.content.Intent;
    voer Android.content.IntentFilter in;
    invoer android.os.Bundle;
    invoer android.view.View;
    voer android.view.View.OnClickListener in;
    voer android.widget.Button in;

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

    / **
     * Gebruik 'n dinamiese manier om die uitsending te registreer
     * @ outeur weijiang204321
     *
     */
    openbare klas DynamicRegisterBroadcastActivity brei aktiwiteit uit {
    om
    openbare statiese finale String NEW_LIFEFORM_DETECTED = "com.dxz.broadcasttest.NEW_LIFEFORM";
    beskermde UnSortBroadcastReceiver-ontvanger;
    om
    @Oorskryf
    beskermde leemte onCreate (Bundel savedInstanceState) {
    super.onCreate (savedInstanceState);
    setContentView (R.layout.activity_main);
    Button btn0 = (Button) findViewById (R.id.btn);
    btn0.setOnClickListener (nuwe OnClickListener () {
    openbare leemte onClick (View v) {
    // Stuur uitsending
    Intent it = new Intent (NEW_LIFEFORM_DETECTED);
    sendBroadcast (dit);
    }
    });
    }

    @Oorskryf
    beskermde leemte onResume () {
    super.onResume ();
    // Registreer vir uitsending
    IntentFilter counterActionFilter = nuwe IntentFilter (NEW_LIFEFORM_DETECTED);
    ontvanger = nuwe UnSortBroadcastReceiver ();
    registerReceiver (ontvanger, counterActionFilter);
    }

    @Oorskryf
    beskermde leemte onPause () {
    super.onPause ();
    // Kanselleer die uitsending
    ontvanger (ontvanger);
    }
    }
    Hier teken ons aan vir uitsending in onResume, en ons kan u inteken vir uitsending in OnPause.
    Verander die beginaktiwiteit na DynamicRegisterBroadcastActivity in AndroidMainfest.xml. Die ander inhoud hoef nie gewysig te word nie. Begin die program en druk die resultaat is baie eenvoudig, so ek sal die prentjie hier nie sien nie.

     

    Kom ons kyk na geordende uitsaai en ongeordende uitsaai

    Ons het dit al aan die begin genoem, kom ons kyk na wanordelike uitsendings:

    Eerstens definieer ons twee uitsaai-ontvangers:

    Die eerste uitsaaier:


    pakket com.broadcast.receiver;

    invoer android.content.BroadcastReceiver;
    voer Android.content.Context in;
    invoer android.content.Intent;
    invoer android.util.Log;

    / **
     * Uitsaai-ontvanger A
     * @ outeur weijiang204321
     *
     */
    openbare klas SortBroadcastReceiverA brei BroadcastReceiver uit {

    @Oorskryf
    openbare leemte op Ontvang (kontekskonteks, bedoeling van voorneme) {
    Log.e ("Demo:", "uitsaaier ontvanger A");
    }

    }
    Die tweede uitsaaier:

    pakket com.broadcast.receiver;

    invoer android.content.BroadcastReceiver;
    voer Android.content.Context in;
    invoer android.content.Intent;
    invoer android.util.Log;

    / **
     * Uitsaai-ontvanger B
     * @ outeur weijiang204321
     *
     */
    openbare klas SortBroadcastReceiverB brei BroadcastReceiver uit {

    @Oorskryf
    openbare leemte op Ontvang (kontekskonteks, bedoeling van voorneme) {
    Log.e ("Demo:", "Uitsending B");
    }

    om
    om
    }


    Teken in op uitsending in AndroidMainfest.xml


     
               
                   
               

           

               
                   
               

    operasie resultaat:


    Die lopende resultaat is 'n bietjie vreemd. Waarom is ontvanger B voor en ontvanger A agter? Die rede is dat wanneer ons inteken op die uitsending in AndroidMainfest.xml, ons die waarde van die kenmerk android: prioriteit in die opsetfilter instel. Hoe groter die waarde, hoe hoër is die prioriteit. , Die prioriteit van ontvanger B is 1000, die prioriteit van ontvanger A is 999, dus B ontvang die uitsending eers, en dan ontvang A dit, maar daar is geen verband tussen ontvanger B en ontvanger A nie, en daar kan geen interaksie wees nie Ja, omdat dit 'n buite-orde-uitsending en asynchroon is, kan ons 'n eksperiment doen deur kode by te voeg tot die onReceiver-metode in B:

    abortBroadcast (); // Beëindig die uitsending van hierdie uitsending

    operasie resultaat:

     

    Ons kan die vinnige fout sien, dit wil sê die uitsending sonder bestelling mag nie die uitsending beëindig nie. In werklikheid is beëindiging nutteloos, omdat ontvanger A steeds die uitsending ontvang.

     

    Kom ons kyk na ordelike uitsending, die kode moet gewysig word:

    Die eerste is wanneer u 'n uitsending stuur:


    Bedoelde uitsending = nuwe voorneme ("com.broadcast.set.broadcast");
    sendOrderedBroadcast (uitsending, nul);
    Voeg dan 'n metode by om die uitsending in die B-ontvanger te beëindig:
    abortBroadcast ();

    Die ander kode hoef nie gewysig te word nie, die bewerkingsresultaat:

     

    Daar is slegs ontvanger B, ontvanger A ontvang nie die uitsending nie, omdat die uitsending in ontvanger B beëindig word en die daaropvolgende ontvangers dit nie kan aanvaar nie.

    Verander die onderstaande kode:

    Ontvanger B:


    pakket com.broadcast.receiver;

    invoer android.content.BroadcastReceiver;
    voer Android.content.Context in;
    invoer android.content.Intent;
    invoer android.os.Bundle;
    invoer android.util.Log;

    / **
     * Uitsaai-ontvanger B
     * @ outeur weijiang204321
     *
     */
    openbare klas SortBroadcastReceiverB brei BroadcastReceiver uit {

    @Oorskryf
    openbare leemte op Ontvang (kontekskonteks, bedoeling van voorneme) {
    Log.e ("Demo:", "uitsaaier ontvanger B");
    Bundelbundel = nuwe bundel ();
    bundle.putString ("next_receiver", "next broadcast receiver");
    setResultExtras (bundel);
    }
    om
    }
    Nadat B die uitsending ontvang het, stoor dit waarde en stuur dit na die volgende ontvanger.


    Ontvanger A se kode:


    pakket com.broadcast.receive

     

     

     

     

    Wys alle Vraag

    bynaam

    E-posadres

    Vrae

    Ons ander produk:

    Professionele FM-radiostasie-toerustingpakket

     



     

    Hotel IPTV-oplossing

     


      Voer e-posadres in om 'n verrassing te kry

      fmuser.org

      es.fmuser.org
      it.fmuser.org
      fr.fmuser.org
      de.fmuser.org
      af.fmuser.org -> Afrikaans
      sq.fmuser.org -> Albanees
      ar.fmuser.org -> Arabies
      hy.fmuser.org -> Armeens
      az.fmuser.org -> Azerbeidjans
      eu.fmuser.org -> Baskies
      be.fmuser.org -> Belo-Russies
      bg.fmuser.org -> Bulgaars
      ca.fmuser.org -> Katalaans
      zh-CN.fmuser.org -> Chinees (vereenvoudig)
      zh-TW.fmuser.org -> Sjinees (Tradisioneel)
      hr.fmuser.org -> Kroaties
      cs.fmuser.org -> Tsjeggies
      da.fmuser.org -> Deens
      nl.fmuser.org -> Nederlandse
      et.fmuser.org -> Esties
      tl.fmuser.org -> Filippyns
      fi.fmuser.org -> Fins
      fr.fmuser.org -> Franse
      gl.fmuser.org -> Galisies
      ka.fmuser.org -> Georgies
      de.fmuser.org -> Duits
      el.fmuser.org -> Grieks
      ht.fmuser.org -> Haïtiaanse kreool
      iw.fmuser.org -> Hebreeus
      hi.fmuser.org -> Hindi
      hu.fmuser.org -> Hungarian
      is.fmuser.org -> Yslands
      id.fmuser.org -> Indonesies
      ga.fmuser.org -> Iers
      it.fmuser.org -> Italiaanse
      ja.fmuser.org -> Japannees
      ko.fmuser.org -> Koreaans
      lv.fmuser.org -> Lets
      lt.fmuser.org -> Litaus
      mk.fmuser.org -> Masedonies
      ms.fmuser.org -> Maleis
      mt.fmuser.org -> Maltees
      no.fmuser.org -> Noorse
      fa.fmuser.org -> Persies
      pl.fmuser.org -> Pools
      pt.fmuser.org -> Portugees
      ro.fmuser.org -> Roemeens
      ru.fmuser.org -> Russies
      sr.fmuser.org -> Serwies
      sk.fmuser.org -> Slowaaks
      sl.fmuser.org -> Sloveens
      es.fmuser.org -> Spaans
      sw.fmuser.org -> Swahili
      sv.fmuser.org -> Sweeds
      th.fmuser.org -> Thai
      tr.fmuser.org -> Turks
      uk.fmuser.org -> Oekraïens
      ur.fmuser.org -> Oerdoe
      vi.fmuser.org -> Viëtnamees
      cy.fmuser.org -> Wallies
      yi.fmuser.org -> Jiddisj

       
  •  

    FMUSER Wirless stuur video en klank makliker toe!

  • Kontak Ons

    adres:
    No.305 Kamer HuiLan-gebou No.273 Huanpu-weg Guangzhou China 510620

    E-pos:
    [e-pos beskerm]

    Tel / WhatApps:
    +8618078869184

  • kategorieë

  • Nuusbrief

    EERSTE OF VOLLE NAAM

    E-pos

  • PayPal oplossing  Westerse UnieBank van China
    E-pos:[e-pos beskerm]   WhatsApp: +8618078869184 Skype: sky198710021 Chat met my
    Kopiereg 2006-2020 Gedryf deur www.fmuser.org

    Kontak Ons