FMUSER Wirless Video və Səsi Daha Asan ötürür!

[e-poçt qorunur] WhatsApp + 8618078869184
Dil

    Android-də yayımın ətraflı izahı

     

    Yayım iki fərqli növə bölünür: "Normal yayımlar" və "Sifarişli yayımlar". Adi yayım tamamilə asenkrondur və bütün yayım alıcıları tərəfindən eyni vaxtda qəbul edilə bilər (məntiqi olaraq). Mesajın ötürülməsinin səmərəliliyi nisbətən yüksəkdir, lakin çatışmazlığı alıcının işləmə nəticəsini növbəti qəbulediciyə ötürə bilməməsi və ləğv edilməməsidir. Yayım Niyyətinin yayılması; Bununla birlikdə, sifariş verilmiş yayım alıcı tərəfindən elan edilmiş prioritetə ​​əsaslanır (android-də elan olunur: niyyət filtri elementinin üstünlük xüsusiyyəti, sayı nə qədər çox olarsa, prioritet o qədər yüksəkdir, dəyər aralığı: -1000 ilə 1000 arasındadır. mümkündür SetPriority () təyin etmək üçün IntentFilter obyektinin) və alıcı yayını növbə ilə alır. Məsələn, A səviyyə B-dən, B səviyyə C-dən yüksəkdirsə, yayım əvvəlcə A-ya, sonra B-yə və nəhayət C-yə ötürülür. məlumatları yayımda saxlaya bilər. Yayım B-yə göndərildikdə, B A tərəfindən saxlanan məlumatları yayımdan əldə edə bilər.

     

    Context.sendBroadcast ()

       Göndərilənlər adi bir yayımdır və bütün abunəçilər onu əldə etmək və işləmək imkanı əldə edirlər.

     

    Context.sendOrderedBroadcast ()

       Göndərmə sifarişli bir yayımdır. Sistem alıcıların elan etdiyi prioritetə ​​uyğun olaraq alıcıları bir-bir icra edəcəkdir. Əvvəlki qəbuledicinin yayımı dayandırmaq hüququ var (BroadcastReceiver.abortBroadcast ()). Yayım əvvəlki qəbuledici tərəfindən dayandırılsa, sonuncusu Alıcı artıq yayını ala bilməz. Sifariş verilmiş yayım üçün əvvəlki alıcı işləmə nəticəsini yayım Niyyətində saxlaya bilər və sonra növbəti qəbulediciyə ötürə bilər.

     
    Yayım alıcısı (BroadcastReceiver) yayım niyyətini almaq üçün istifadə olunur və yayım niyyətinin göndərilməsi Context.sendBroadcast () və Context.sendOrderedBroadcast () zəngləri ilə həyata keçirilir. Ümumiyyətlə bir yayım niyyəti bu niyyətə abunə olan bir çox yayım alıcısı tərəfindən qəbul edilə bilər. Bu xüsusiyyət JMS-də Mövzu mesajı qəbuledicilərinə bənzəyir. Yayım qəbuledicisi metodunu tətbiq etmək aşağıdakı kimidir:

     

    İlk addım: yayım alıcısını təyin edin, BroadcastReceiver-i miras edin və onReceive () metodunu yenidən yazın.

    ümumi sinif IncomingSMSReceiver genişlənirBroadcastReceiver {
      @Override public void onReceive (Kontekst, Məqsəd) {
      }
    }

     

    Addım 2: Yayına abunə olun, maraq niyyəti, iki abunə üsulu var:

    Birinci növ: abunə olmaq üçün koddan istifadə edin (dinamik abunə)

    IntentFilter filter = newIntentFilter ("android.provider.Telephony.SMS_RECEIVED");
    IncomingSMSReceiver qəbuledicisi = newIncomingSMSReceiver ();
    registerReceiver (alıcı, filtr);

     

    İkinci növ: Abunə olun AndroidManifest.xml sənədindəki qovşaq (statik abunə)


      
           
      


    Dinamik yayım abunəliyi ilə statik yayım abunəliyi arasındakı fərqə nəzər salaq:
    Statik abunə yayımına da deyilir: rezident yayım. Müraciətiniz bağlandıqda, bir yayım mesajı varsa, yazdığınız yayım alıcısı da ala bilər. Qeydiyyat üsulu tətbiqinizdə AndroidManifastdır. .xml abunə üçün.

     

    Dinamik abunə yayımına da deyilir: qeyri-rezident yayım. Tətbiq bitdikdə yayım təbii olaraq yox olacaq. Məsələn, onCreate və ya onResume fəaliyyətində yayımlanmaya abunə olmusunuz və onDestory ya da onPause-da yayım abunəliyinizi ləğv etməlisiniz. Əks təqdirdə, bir istisna bildiriləcək, beləliklə yayım alıcınız qeyri-rezident olacaq.

     

    Burada iki abunə üsulu olan daha bir detal var. Yayımları göndərərkən aşağıdakılara diqqət yetirməlisiniz: Dinamik qeydiyyat üçün örtük niyyət metodu istifadə olunur, buna görə də yayım göndərərkən göndərmək üçün gizli niyyət istifadə etməlisiniz. Əks təqdirdə, yayım alıcısı yayımı qəbul edə bilməyəcəkdir. Bu məqama diqqət yetirin. Ancaq statik olaraq abunə olduqda, AndroidMainfest.xml-də abunə olduğu üçün, yayım göndərərkən ekran niyyəti və örtük niyyətindən istifadə etmək mümkündür (əlbətdə bu yalnız özümüzün müəyyənləşdirdiyimiz yayım alıcıları üçündür), buna görə hər halda, örtük istifadə edirik Yayım göndərmək niyyəti var.

     

    Bir nümunəyə baxaq:

    Layihə quruluşuna nəzər yetirin:

     

    Statik abunə yayımına nəzər yetirin:
    paketi com.broadcast.demo;

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

    idxal com.example.androidbroadcastdemo.R;

    / **
     * Statik abunə yayımı
     * @Müəllif weijiang204321
     *
     */
    ictimai sinif StaticRegisterBroadcastActivity Fəaliyyəti genişləndirir {

    @Oride
    qorunan boşluq onCreate (Bundle savedInstanceState) {
    super.onCreate (savedInstanceState);
    setContentView (R.layout.activity_main);
    Düymə btn = (Düymə) findViewById (R.id.btn);
    Kənar
    btn.setOnClickListener (yeni OnClickListener () {
    @Oride
    ictimai boşluq onClick (V-yə baxın) {
    // Yayımı qeyd etmək üçün statik bir yol istifadə edin, yayımı göndərmək üçün ekran niyyətindən istifadə edə bilərsiniz
    Niyyət yayımı = yeni Niyyət ("com.broadcast.set.broadcast");
    sendBroadcast (yayım, boş);
    }
    Kənar
    });
    }
    Kənar
    }


    AndroidMainfest.xml-də abunə olun:



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

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

        <tətbiq
            Android: allowBackup = "doğru"
            android: icon = "@ drawable / ic_launcher"
            android: label = "@ string / app_name"
            android: theme = "@ style / AppTheme">
            <fəaliyyət
                android: name = "com.broadcast.demo.StaticRegisterBroadcastActivity"
                android: label = "@ string / app_name">
               
                   
                   
               
           
           
           
           
               
                   
               
           
           
           
           
           
               
                   
               
           
           
           
           
               
                   
               
           
           
           
           
           
               
                   
               
           
           
       

    Digər məzmundan hələlik narahat olmayın, daha sonra danışacağımız üçün burada yalnız statik yayımların qeydiyyatı üzərində dayanırıq


          
               
                   
               
           


    Yayının alıcısına nəzər salaq:

    paket com.broadcast.receiver;

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

    / **
     * Yayım alıcısı
     * @Müəllif weijiang204321
     *
     */
    ümumi sinif UnSortBroadcastReceiver genişləndirir BroadcastReceiver {

    @Oride
    public void onReceive (Kontekst konteksti, Niyyət niyyəti) {
    Log.e ("Intent_Action:", purpose.getAction () + "");
    }

    }
    Yayım qəbuledicisindəki onReceive metodundakı məntiq çox sadədir, yəni Fəaliyyətin məzmununu çap etməkdir.
    Proqramı çalıştırın, nəticə çox sadədir, burada şəkil deyil.

     

    Gəlin dinamik abunəçilərə nəzər salaq:


    paketi com.broadcast.demo;

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

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

    / **
     * Yayımı qeyd etmək üçün dinamik bir şəkildə istifadə edin
     * @Müəllif weijiang204321
     *
     */
    ümumi sinif DynamicRegisterBroadcastActivity Fəaliyyəti genişləndirir {
    Kənar
    public static final String NEW_LIFEFORM_DETECTED = "com.dxz.broadcasttest.NEW_LIFEFORM";
    qorunan UnSortBroadcastReceiver alıcısı;
    Kənar
    @Oride
    qorunan boşluq onCreate (Bundle savedInstanceState) {
    super.onCreate (savedInstanceState);
    setContentView (R.layout.activity_main);
    Düymə btn0 = (Düymə) findViewById (R.id.btn);
    btn0.setOnClickListener (yeni OnClickListener () {
    ictimai boşluq onClick (V-yə baxın) {
    // Yayım göndərin
    Niyyət = yeni Niyyət (NEW_LIFEFORM_DETECTED);
    sendBroadcast (it);
    }
    });
    }

    @Oride
    qorunan boşluq onResume () {
    super.onResume ();
    // Yayım üçün qeydiyyatdan keçin
    IntentFilter counterActionFilter = yeni IntentFilter (NEW_LIFEFORM_DETECTED);
    alıcı = yeni UnSortBroadcastReceiver ();
    registerReceiver (qəbuledici, counterActionFilter);
    }

    @Oride
    qorunan boşluq onPause () {
    super.onPause ();
    // Yayımı ləğv edin
    qeydiyyatdan keçməReceiver (alıcı);
    }
    }
    Burada onResume-də yayımlanmağa, onPause-da yayımlanmaya abunə oluruq.
    Başladığı Fəaliyyəti AndroidMainfest.xml-də DynamicRegisterBroadcastActivity olaraq dəyişdirin. Digər məzmunun dəyişdirilməsinə ehtiyac yoxdur. Proqramı çalıştırın və nəticəni yazdırın çox sadədir, buna görə şəkli burada görməyəcəyəm.

     

    Sifarişli yayım və qaydasız yayımlara nəzər salaq

    Bunu əvvəldə də qeyd etmişdik, gəlin qaydasız yayımlara nəzər salaq:

    Əvvəlcə iki yayım alıcısını təyin edirik:

    İlk yayım alıcısı:


    paket com.broadcast.receiver;

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

    / **
     * Yayım alıcısı A
     * @Müəllif weijiang204321
     *
     */
    ümumi sinif SortBroadcastReceiverA BroadcastReceiver-ı genişləndirir {

    @Oride
    public void onReceive (Kontekst konteksti, Niyyət niyyəti) {
    Log.e ("Demo:", "yayım alıcısı A");
    }

    }
    İkinci yayım alıcısı:

    paket com.broadcast.receiver;

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

    / **
     * Yayım alıcısı B
     * @Müəllif weijiang204321
     *
     */
    ümumi sinif SortBroadcastReceiverB BroadcastReceiver-ı genişləndirir {

    @Oride
    public void onReceive (Kontekst konteksti, Niyyət niyyəti) {
    Log.e ("Demo:", "Broadcast B");
    }

    Kənar
    Kənar
    }


    AndroidMainfest.xml-də yayımlanmağa abunə olun


     
               
                   
               

           

               
                   
               

    əməliyyat nəticəsi:


    Çalışan nəticə bir az qəribədir. Niyə alıcı B öndə, A alıcı arxadadır? Səbəbi budur ki, AndroidMainfest.xml-də yayımlanmaya abunə olduğumuz zaman android: prioritet atribut dəyərini niyyət-filtrdə təyin etdik. Dəyər nə qədər böyükdürsə, prioritet o qədər yüksəkdir. , A alıcısının prioriteti 1000, A alıcısının prioriteti 999, buna görə B əvvəl yayını alır, sonra A qəbul edir, lakin B alıcısı ilə A alıcısı arasında heç bir əlaqə yoxdur və heç bir qarşılıqlı əlaqə ola bilməz, Bəli, bu sıradan çıxmış bir yayım və asinxron olduğu üçün B-də onReceiver metoduna kod əlavə edərək bir təcrübə edə bilərik:

    abortBroadcast (); // Bu yayımın ötürülməsini dayandırın

    əməliyyat nəticəsi:

     

    Çağırış səhvini görə bilərik, yəni sifariş verilmiş yayımın yayımı dayandırmasına icazə verilmir. Əslində, sonlandırma faydasızdır, çünki A alıcısı yayını hələ də alır.

     

    Sifarişli yayımlara nəzər salaq, kodun dəyişdirilməsi lazımdır:

    Birincisi, bir yayım göndərərkən:


    Niyyət yayımı = yeni Niyyət ("com.broadcast.set.broadcast");
    sendOrderedBroadcast (yayım, boş);
    Sonra B alıcısında yayımı dayandırmaq üçün bir metod əlavə edin:
    abortBroadcast ();

    Digər kodun dəyişdirilməsinə ehtiyac yoxdur, əməliyyat nəticəsi:

     

    Yalnız B qəbuledicisi var, A alıcısı yayımı qəbul etmir, çünki B alıcısında yayım dayandırılır və sonrakı alıcılar qəbul edə bilmir.

    Aşağıdakı kodu dəyişdirin:

    Alıcı B:


    paket com.broadcast.receiver;

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

    / **
     * Yayım alıcısı B
     * @Müəllif weijiang204321
     *
     */
    ümumi sinif SortBroadcastReceiverB BroadcastReceiver-ı genişləndirir {

    @Oride
    public void onReceive (Kontekst konteksti, Niyyət niyyəti) {
    Log.e ("Demo:", "yayım alıcısı B");
    Bundle paketi = yeni Bundle ();
    bundle.putString ("növbəti_ alıcı", "növbəti yayım alıcısı");
    setResultExtras (paket);
    }
    Kənar
    }
    B yayımı aldıqdan sonra bir qədər dəyər saxlayır və növbəti alıcıya ötürür.


    Alıcının A kodu:


    paketi com.broadcast.receive

     

     

     

     

    bütün Sual siyahısı

    Ləqəb

    mina

    Suallar

    Bizim digər məhsul:

    Professional FM Radio Stansiyası Avadanlıq Paketi

     



     

    Otel IPTV Həlli

     


      Sürpriz almaq üçün e-poçt daxil edin

      fmuser.org

      es.fmuser.org
      it.fmuser.org
      fr.fmuser.org
      de.fmuser.org
      af.fmuser.org -> Afrikaans
      sq.fmuser.org -> Alban
      ar.fmuser.org -> ərəb
      hy.fmuser.org -> Ermənistan
      az.fmuser.org -> azərbaycan dili
      eu.fmuser.org -> Bask
      be.fmuser.org -> Belarus
      bg.fmuser.org -> Bulgarian
      ca.fmuser.org -> Katalan
      zh-CN.fmuser.org -> Çin (Sadələşdirilmiş)
      zh-TW.fmuser.org -> Çin (Ənənəvi)
      hr.fmuser.org -> Xorvat
      cs.fmuser.org -> Çex dili
      da.fmuser.org -> Danimarkalı
      nl.fmuser.org -> Holland
      et.fmuser.org -> Eston
      tl.fmuser.org -> Filipin
      fi.fmuser.org -> Fin
      fr.fmuser.org -> Fransız
      gl.fmuser.org -> Qalisian
      ka.fmuser.org -> gürcü
      de.fmuser.org -> Alman
      el.fmuser.org -> Yunan
      ht.fmuser.org -> Haiti Kreolu
      iw.fmuser.org -> İbrani
      hi.fmuser.org -> Hind dili
      hu.fmuser.org -> Macar
      is.fmuser.org -> İslandiya
      id.fmuser.org -> İndoneziya
      ga.fmuser.org -> İrlandiyalı
      it.fmuser.org -> Italian
      ja.fmuser.org -> Yapon
      ko.fmuser.org -> Koreyalı
      lv.fmuser.org -> Latviya
      lt.fmuser.org -> Litva
      mk.fmuser.org -> Makedoniya
      ms.fmuser.org -> Malay dili
      mt.fmuser.org -> Malta
      no.fmuser.org -> Norveç
      fa.fmuser.org -> Fars dili
      pl.fmuser.org -> Polşa
      pt.fmuser.org -> Portuqal
      ro.fmuser.org -> Roman
      ru.fmuser.org -> Rus
      sr.fmuser.org -> Serb
      sk.fmuser.org -> Slovak
      sl.fmuser.org -> Sloveniya
      es.fmuser.org -> İspan
      sw.fmuser.org -> suahili
      sv.fmuser.org -> İsveç
      th.fmuser.org -> Thai
      tr.fmuser.org -> Türkcə
      uk.fmuser.org -> Ukrayna
      ur.fmuser.org -> Urdu
      vi.fmuser.org -> Vietnamese
      cy.fmuser.org -> Uels
      yi.fmuser.org -> Azərbaycan

       
  •  

    FMUSER Wirless Video və Səsi Daha Asan ötürür!

  • Əlaqə

    Ünvan:
    No. 305 Otaq HuiLan Bina No.273 Huanpu Yolu Guangzhou Çin 510620

    E-mail:
    [e-poçt qorunur]

    Tel / WhatApps:
    + 8618078869184

  • Kateqoriyalar

  • Newsletter

    İLK VƏ TAM AD

    E-mail

  • paypal solution  Qərb birliyiÇin Bank
    E-mail:[e-poçt qorunur]   WhatsApp: +8618078869184 Skype: sky198710021 Mənimlə söhbət
    Copyright 2006-2020 Powered By www.fmuser.org

    Əlaqə