FMUSER Kablosuz Video ve Sesi Daha Kolay İletin!

[e-posta korumalı] WhatsApp + 8618078869184
Dil

    Android'de Yayınla ilgili ayrıntılı açıklama

     

    Yayın, iki farklı türe ayrılır: "Normal yayınlar" ve "Sıralı yayınlar". Sıradan yayın tamamen eşzamansızdır ve tüm yayın alıcıları tarafından aynı anda (mantıksal olarak) alınabilir. Mesaj dağıtımının verimliliği nispeten yüksektir, ancak dezavantajı, alıcının işlem sonucunu bir sonraki alıcıya iletememesi ve sonlandırılamamasıdır. Yayın Amacı yayılımı; ancak, sıralı yayın, alıcı tarafından bildirilen önceliğe dayanır (android'de beyan edilir: amaç filtresi öğesinin öncelik özniteliği, sayı ne kadar büyükse, öncelik o kadar yüksek, değer aralığı: -1000 ila 1000'dir. olası Ayarlanacak IntentFilter nesnesinin setPriority () yöntemini çağırın) ve alıcı, sırayla yayını alır. Örneğin, A'nın seviyesi B'ninkinden yüksekse ve B'nin seviyesi C'den yüksekse, yayın önce A'ya, sonra B'ye ve son olarak C'ye iletilir. A yayını aldıktan sonra, yayın verileri yayında saklayabilir. Yayın B'ye gönderildiğinde, B yayından A tarafından depolanan verileri alabilir.

     

    Context.sendBroadcast ()

       Gönderilen şey sıradan bir yayındır ve tüm abonelerin bunu alma ve işleme fırsatı vardır.

     

    Context.sendOrderedBroadcast ()

       Gönderme, düzenli bir yayındır. Sistem, alıcının beyan ettiği önceliğe göre alıcıları tek tek çalıştıracaktır. Önceki alıcı yayını sonlandırma hakkına sahiptir (BroadcastReceiver.abortBroadcast ()). Yayın önceki alıcı tarafından sonlandırılırsa, sonuncusu Alıcı artık yayını alamaz. Sipariş edilen yayın için, önceki alıcı işleme sonucunu yayın Hedefinde saklayabilir ve ardından sonraki alıcıya iletebilir.

     
    Yayın alıcısı (BroadcastReceiver), yayın Amacını almak için kullanılır ve yayın Amacının gönderilmesi, Context.sendBroadcast () ve Context.sendOrderedBroadcast () çağrılarak gerçekleştirilir. Genellikle bir yayın Niyeti, bu Niyete abone olan birden çok yayın alıcısı tarafından alınabilir. Bu özellik, JMS'deki Konu mesajı alıcılarına benzer. Bir yayın alıcısı yöntemi uygulamak için aşağıdaki gibidir:

     

    İlk adım: yayın alıcısını tanımlama, BroadcastReceiver'ı devralma ve onReceive () yöntemini yeniden yazma.

    public class GelenSMSRalıcı,BroadcastReceiver'ı genişletir {
      @Override public void onReceive (Contextcontext, Intentintent) {
      }
    }

     

    Adım 2: İlgi konusu yayına abone olun, iki abonelik yöntemi vardır:

    İlk tür: abone olmak için kod kullanın (dinamik abonelik)

    IntentFilter filtresi = newIntentFilter ("android.provider.Telephony.SMS_RECEIVED");
    IncomingSMSReceiver alıcı = newIncomingSMSReceiver ();
    registerReceiver (alıcı, filtre);

     

    İkinci tür: AndroidManifest.xml dosyasındaki düğüm (statik abonelik)


      
           
      


    Dinamik yayın aboneliği ile statik yayın aboneliği arasındaki farka bir göz atalım:
    Statik abonelik yayını, yerleşik yayın olarak da adlandırılır. Uygulamanız kapatıldığında yayın mesajı varsa yazdığınız yayın alıcısı da alabilir. Uygulamanızdaki kayıt yöntemi AndroidManifast'tır. abonelik için .xml.

     

    Dinamik abonelik yayını, yerleşik olmayan yayın olarak da adlandırılır. Uygulama sona erdiğinde, yayın doğal olarak kaybolacaktır. Örneğin, etkinlikte onCreate veya onResume'daki yayına abone olursunuz ve onDestory veya onPause'da yayın aboneliğini iptal etmeniz gerekir. Aksi takdirde, bir istisna rapor edilecektir, bu nedenle yayın alıcınız ikamet etmeyecektir.

     

    Burada iki abonelik yöntemi olan bir ayrıntı daha var. Yayın gönderirken şunlara dikkat etmeniz gerekir: Örtük amaç yöntemi dinamik kayıt için kullanılır, bu nedenle yayınları gönderirken göndermek için örtük niyet kullanmanız gerekir. Aksi takdirde yayın alıcısı yayını alamayacaktır. Bu noktaya dikkat edin. Ancak statik olarak abone olurken, AndroidMainfest.xml'de abone olduğu için, yayın gönderirken görüntüleme Amaçlı ve örtük Amaç kullanmak mümkündür (elbette bu yalnızca kendimiz tarafından tanımlanan yayın alıcıları içindir), bu nedenle, her ihtimale karşı, genellikle örtük kullanırız Yayın gönderme niyeti.

     

    Bir örneğe bakalım:

    Proje yapısına bir göz atın:

     

    Statik abonelik yayınına bir göz atın:
    paket com.broadcast.demo;

    android.app.Activity içe aktarımı;
    ithal android.content.Intent;
    android.os.Bundle'ı içe aktarın;
    android.view.View dosyasını içe aktarın;
    android.view.View.OnClickListener'ı içe aktarın;
    android.widget.Button'ı içe aktarın;

    com.example.androidbroadcastdemo.R'yi içe aktarın;

    / **
     * Statik abonelik yayını
     * @yazar weijiang204321
     *
     */
    public class StaticRegisterBroadcastActivity, Activity {

    @Override
    korumalı void onCreate (Bundle registeredInstanceState) {
    super.onCreate (SavedInstanceState);
    setContentView (R.layout.activity_main);
    Düğme btn = (Düğme) findViewById (R.id.btn);
    için
    btn.setOnClickListener (new OnClickListener () {
    @Override
    public void onClick (View v) {
    // Yayını kaydetmek için statik bir yol kullanın, yayını göndermek için görüntüleme amacını kullanabilirsiniz
    Amaç yayını = yeni Amaç ("com.broadcast.set.broadcast");
    sendBroadcast (yayın, boş);
    }
    için
    });
    }
    için
    }


    AndroidMainfest.xml'de abone olun:



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

        <sdk'yi kullanır
            android: minSdkVersion = "8"
            android: targetSdkVersion = "18" />
       
       
       
       
       
       

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

    Şimdilik diğer içerik için endişelenmeyin, daha sonra bahsedeceğimiz gibi, burada sadece statik yayınların kayıtlarına odaklanıyoruz.


          
               
                   
               
           


    Yayının alıcısına bir göz atalım:

    paket com.broadcast.receiver;

    ithal android.content.BroadcastReceiver;
    android.content.Context'i içe aktarın;
    ithal android.content.Intent;
    android.util.Log'u içe aktar;

    / **
     * Yayın alıcı
     * @yazar weijiang204321
     *
     */
    public class UnSortBroadcastReceiver, BroadcastReceiver'ı genişletir {

    @Override
    public void onReceive (Bağlam bağlamı, Amaç amacı) {
    Log.e ("Intent_Action:", intent.getAction () + "");
    }

    }
    Yayın alıcısındaki onReceive yöntemindeki mantık çok basittir, yani Eylemin içeriğini yazdırmaktır.
    Programı çalıştırın, sonuç çok basit, burada resim yok.

     

    Dinamik aboneliklere bir göz atalım:


    paket com.broadcast.demo;

    android.app.Activity içe aktarımı;
    ithal android.content.Intent;
    ithal android.content.IntentFilter;
    android.os.Bundle'ı içe aktarın;
    android.view.View dosyasını içe aktarın;
    android.view.View.OnClickListener'ı içe aktarın;
    android.widget.Button'ı içe aktarın;

    com.broadcast.receiver.UnSortBroadcastReceiver'ı içe aktarın;
    com.example.androidbroadcastdemo.R'yi içe aktarın;

    / **
     * Yayını kaydetmek için dinamik bir yol kullanın
     * @yazar weijiang204321
     *
     */
    public class DynamicRegisterBroadcastActivity, Aktiviteyi genişletir {
    için
    public static final String NEW_LIFEFORM_DETECTED = "com.dxz.broadcasttest.NEW_LIFEFORM";
    korumalı UnSortBroadcastReceiver alıcısı;
    için
    @Override
    korumalı void onCreate (Bundle registeredInstanceState) {
    super.onCreate (SavedInstanceState);
    setContentView (R.layout.activity_main);
    Düğme btn0 = (Düğme) findViewById (R.id.btn);
    btn0.setOnClickListener (new OnClickListener () {
    public void onClick (View v) {
    // Yayın gönder
    Amaç o = yeni Amaç (NEW_LIFEFORM_DETECTED);
    sendBroadcast (it);
    }
    });
    }

    @Override
    korumalı void onResume () {
    super.onResume ();
    // Yayına kaydol
    IntentFilter counterActionFilter = yeni IntentFilter (NEW_LIFEFORM_DETECTED);
    alıcı = new UnSortBroadcastReceiver ();
    registerReceiver (alıcı, counterActionFilter);
    }

    @Override
    korumalı void onPause () {
    super.onPause ();
    // Yayını iptal et
    unregisterReceiver (alıcı);
    }
    }
    Burada onResume'da yayına abone oluyoruz ve onPause'da yayın aboneliğinden çıkıyoruz.
    AndroidMainfest.xml'de başlatılan Activity'i DynamicRegisterBroadcastActivity olarak değiştirin. Diğer içeriğin değiştirilmesine gerek yoktur. Programı çalıştırın ve sonucu yazdırmak çok basit, bu yüzden burada resmi görmeyeceğim.

     

    Sıralı yayın ve sırasız yayına bir göz atalım

    Başta bundan daha önce bahsetmiştik, düzensiz yayınlara bir göz atalım:

    İlk önce iki yayın alıcısı tanımlıyoruz:

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


    paket com.broadcast.receiver;

    ithal android.content.BroadcastReceiver;
    android.content.Context'i içe aktarın;
    ithal android.content.Intent;
    android.util.Log'u içe aktar;

    / **
     * Yayın alıcısı A
     * @yazar weijiang204321
     *
     */
    genel sınıf SortBroadcastReceiverA BroadcastReceiver'ı genişletir {

    @Override
    public void onReceive (Bağlam bağlamı, Amaç amacı) {
    Log.e ("Demo:", "yayın alıcısı A");
    }

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

    paket com.broadcast.receiver;

    ithal android.content.BroadcastReceiver;
    android.content.Context'i içe aktarın;
    ithal android.content.Intent;
    android.util.Log'u içe aktar;

    / **
     * Yayın alıcısı B
     * @yazar weijiang204321
     *
     */
    genel sınıf SortBroadcastReceiverB, BroadcastReceiver'ı genişletir {

    @Override
    public void onReceive (Bağlam bağlamı, Amaç amacı) {
    Log.e ("Demo:", "Yayın B");
    }

    için
    için
    }


    AndroidMainfest.xml'de yayına abone olun


     
               
                   
               

           

               
                   
               

    operasyon sonucu:


    Sonuç biraz tuhaf. Neden alıcı B önde ve alıcı A arkada? Bunun nedeni, AndroidMainfest.xml'deki yayına abone olduğumuzda, amaç filtresinde android: öncelik öznitelik değerini belirlememizdir. Değer ne kadar büyükse, öncelik o kadar yüksek olur. , B alıcısının önceliği 1000'dir, A alıcısının önceliği 999'dur, bu nedenle B önce yayını alır ve sonra A alır, ancak alıcı B ile alıcı A arasında bağlantı yoktur ve etkileşim olamaz Evet, Bu bir sıra dışı yayın ve eşzamansız olduğu için, B'deki onReceiver yöntemine kod ekleyerek bir deney yapabiliriz:

    abortBroadcast (); // Bu yayının iletimini sonlandırın

    operasyon sonucu:

     

    Anında hatayı görebiliyoruz, yani sırasız yayının yayını sonlandırmasına izin verilmiyor. Aslında, sonlandırma işe yaramaz, çünkü A alıcısı yayını almaya devam ediyor.

     

    Düzenli yayına bir göz atalım, kodun değiştirilmesi gerekiyor:

    Birincisi, bir yayın gönderirken:


    Amaç yayını = yeni Amaç ("com.broadcast.set.broadcast");
    sendOrderedBroadcast (yayın, boş);
    Ardından, B alıcısında yayını sonlandırmak için bir yöntem ekleyin:
    abortBroadcast ();

    Diğer kodun değiştirilmesine gerek yoktur, işlem sonucu:

     

    Yalnızca alıcı B vardır, alıcı A yayını almaz, çünkü yayın alıcı B'de sonlandırılır ve sonraki alıcılar bunu kabul edemez.

    Aşağıdaki kodu değiştirin:

    Alıcı B:


    paket com.broadcast.receiver;

    ithal android.content.BroadcastReceiver;
    android.content.Context'i içe aktarın;
    ithal android.content.Intent;
    android.os.Bundle'ı içe aktarın;
    android.util.Log'u içe aktar;

    / **
     * Yayın alıcısı B
     * @yazar weijiang204321
     *
     */
    genel sınıf SortBroadcastReceiverB, BroadcastReceiver'ı genişletir {

    @Override
    public void onReceive (Bağlam bağlamı, Amaç amacı) {
    Log.e ("Demo:", "yayın alıcısı B");
    Paket paketi = yeni Paket ();
    bundle.putString ("sonraki_verici", "sonraki yayın alıcısı");
    setResultExtras (paket);
    }
    için
    }
    B yayını aldıktan sonra, bir miktar değeri saklar ve bir sonraki alıcıya iletir.


    Alıcının kodu:


    paket com.broadcast.receive

     

     

     

     

    Tüm Soru Liste

    rumuz

    e-posta

    Sorular

    Bizim diğer ürün:

    Profesyonel FM Radyo İstasyonu Ekipman Paketi

     



     

    Otel IPTV Çözümü

     


      Sürpriz almak için e-posta girin

      fmuser.org

      es.fmuser.org
      it.fmuser.org
      fr.fmuser.org
      de.fmuser.org
      af.fmuser.org -> Afrikaans
      sq.fmuser.org -> Arnavutça
      ar.fmuser.org -> Arapça
      hy.fmuser.org -> Ermeni
      az.fmuser.org -> Azerice
      eu.fmuser.org -> Bask Dili
      be.fmuser.org -> Beyaz Rusça
      bg.fmuser.org -> Bulgar
      ca.fmuser.org -> Katalanca
      zh-CN.fmuser.org -> Çince (Basitleştirilmiş)
      zh-TW.fmuser.org -> Çince (Geleneksel)
      hr.fmuser.org -> Hırvatça
      cs.fmuser.org -> Çekçe
      da.fmuser.org -> Danca
      nl.fmuser.org -> Hollandalı
      et.fmuser.org -> Estonca
      tl.fmuser.org -> Filipinli
      fi.fmuser.org -> Fince
      fr.fmuser.org -> Fransızca
      gl.fmuser.org -> Galiçyaca
      ka.fmuser.org -> Gürcüce
      de.fmuser.org -> Almanca
      el.fmuser.org -> Yunanca
      ht.fmuser.org -> Haiti Kreyolu
      iw.fmuser.org -> İbranice
      hi.fmuser.org -> Hintçe
      hu.fmuser.org -> Macar
      is.fmuser.org -> İzlandaca
      id.fmuser.org -> Endonezya
      ga.fmuser.org -> İrlandalı
      it.fmuser.org -> İtalyan
      ja.fmuser.org -> Japonca
      ko.fmuser.org -> Korece
      lv.fmuser.org -> Letonca
      lt.fmuser.org -> Litvanya
      mk.fmuser.org -> Makedonca
      ms.fmuser.org -> Malayca
      mt.fmuser.org -> Malta
      no.fmuser.org -> Norveç
      fa.fmuser.org -> Farsça
      pl.fmuser.org -> Lehçe
      pt.fmuser.org -> Portekizce
      ro.fmuser.org -> Romen
      ru.fmuser.org -> Rusça
      sr.fmuser.org -> Sırpça
      sk.fmuser.org -> Slovakça
      sl.fmuser.org -> Slovence
      es.fmuser.org -> İspanyolca
      sw.fmuser.org -> Svahili
      sv.fmuser.org -> İsveççe
      th.fmuser.org -> Tay
      tr.fmuser.org -> Türkçe
      uk.fmuser.org -> Ukraynaca
      ur.fmuser.org -> Urduca
      vi.fmuser.org -> Vietnamca
      cy.fmuser.org -> Galce
      yi.fmuser.org -> Yidiş

       
  •  

    FMUSER Kablosuz Video ve Sesi Daha Kolay İletin!

  • İletişim

    Adres:
    No.305 Oda HuiLan Binası No. 273 Huanpu Yolu Guangzhou Çin 510620

    E-mail:
    [e-posta korumalı]

    Tel / WhatsApp:
    + 8618078869184

  • Kategoriler

  • Kaydolun

    BİRİNCİ VEYA TAM AD

    E-posta

  • paypal çözüm  Western UnionÇin Bankası
    E-mail:[e-posta korumalı]   WhatsApp: +8618078869184 Skype: sky198710021 Benimle sohbet et
    Telif 2006-2020 Powered By www.fmuser.org

    Bize ulaşın