FMUSER Wirless Mengirim Video Dan Audio Lebih Mudah!

[email dilindungi] WhatsApp + 8618078869184
Bahasa

    Penjelasan mendetail tentang Broadcast di Android

     

    Penyiaran dibagi menjadi dua jenis: "Siaran normal" dan "Siaran berurutan". Siaran biasa sepenuhnya tidak sinkron dan dapat diterima oleh semua penerima siaran pada waktu yang sama (secara logis). Efisiensi pengiriman pesan relatif tinggi, namun kekurangannya adalah penerima tidak dapat meneruskan hasil pemrosesan ke penerima berikutnya, dan tidak dapat diakhiri. Penyebaran Maksud Siaran; namun, siaran terurut didasarkan pada prioritas yang dideklarasikan oleh penerima (dideklarasikan dalam atribut android: priority dari elemen filter maksud, semakin besar angkanya, semakin tinggi prioritasnya, rentang nilainya: -1000 hingga 1000. Begitu juga kemungkinan Panggil setPriority () dari objek IntentFilter yang akan disetel), dan penerima menerima siaran secara bergantian. Misalnya, jika level A lebih tinggi dari level B, dan level B lebih tinggi dari C, maka siaran tersebut pertama-tama ditransmisikan ke A, lalu ke B, dan terakhir ke C. Setelah A mendapatkan siaran, itu dapat menyimpan data dalam siaran. Ketika siaran dikirim ke B, B bisa mendapatkan data yang disimpan oleh A dari siaran.

     

    Context.sendBroadcast ()

       Yang dikirim adalah siaran biasa, dan semua pelanggan memiliki kesempatan untuk memperoleh dan memprosesnya.

     

    Context.sendOrderedBroadcast ()

       Mengirim adalah siaran yang teratur. Sistem akan mengeksekusi penerima satu per satu sesuai dengan prioritas yang dideklarasikan oleh penerima. Penerima sebelumnya memiliki hak untuk menghentikan siaran (BroadcastReceiver.abortBroadcast ()). Jika siaran dihentikan oleh penerima sebelumnya, penerima sebelumnya tidak bisa lagi menerima siaran. Untuk siaran yang dipesan, penerima sebelumnya bisa menyimpan hasil pemrosesan di Maksud siaran, lalu meneruskannya ke penerima berikutnya.

     
    Penerima siaran (BroadcastReceiver) digunakan untuk menerima Maksud siaran, dan pengiriman Maksud siaran direalisasikan dengan memanggil Context.sendBroadcast () dan Context.sendOrderedBroadcast (). Biasanya Intent siaran dapat diterima oleh beberapa penerima siaran yang berlangganan Intent ini. Fitur ini mirip dengan penerima pesan Topik di JMS. Untuk mengimplementasikan metode penerima siaran adalah sebagai berikut:

     

    Langkah pertama: tentukan penerima siaran, warisi BroadcastReceiver, dan tulis ulang metode onReceive ().

    kelas publik IncomingSMSReceiver extendsBroadcastReceiver {
      @Override public void onReceive (Contextcontext, Intentintent) {
      }
    }

     

    Langkah 2: Berlangganan siaran Maksud minat, ada dua metode berlangganan:

    Jenis pertama: gunakan kode untuk berlangganan (langganan dinamis)

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

     

    Jenis kedua: Berlangganan di node di file AndroidManifest.xml (langganan statis)


      
           
      


    Mari kita lihat perbedaan antara langganan siaran dinamis dan langganan siaran statis:
    Siaran langganan statis juga disebut: siaran residen. Saat aplikasi Anda ditutup, jika ada pesan siaran, penerima siaran yang Anda tulis juga bisa menerimanya. Metode pendaftarannya adalah AndroidManifast di aplikasi Anda. .xml untuk berlangganan.

     

    Siaran langganan dinamis juga disebut: siaran non-residen. Saat aplikasi berakhir, siaran secara alami akan hilang. Misalnya, Anda berlangganan siaran di onCreate atau onResume dalam aktivitas, dan Anda harus membatalkan langganan siaran di onDestory atau onPause. Jika tidak, pengecualian akan dilaporkan, jadi penerima siaran Anda adalah non-residen.

     

    Ada satu detail lagi di sini, yaitu dua metode berlangganan. Saat mengirim siaran, Anda perlu memperhatikan: Metode maksud implisit digunakan untuk pendaftaran dinamis, jadi Anda perlu menggunakan maksud implisit untuk dikirim saat mengirim siaran. , Jika tidak, penerima siaran tidak akan dapat menerima siaran tersebut. Perhatikan poin ini. Tetapi saat berlangganan secara statis, karena berlangganan di AndroidMainfest.xml, dimungkinkan untuk menggunakan maksud tampilan dan maksud implisit saat mengirim siaran (tentu saja ini hanya untuk penerima siaran yang ditentukan sendiri), jadi untuk berjaga-jaga, kami biasanya menggunakan implisit Bermaksud mengirim siaran.

     

    Mari kita lihat contohnya:

    Lihat struktur proyek:

     

    Lihat siaran langganan statis:
    paket com.broadcast.demo;

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

    impor com.example.androidbroadcastdemo.R;

    / **
     * Siaran langganan statis
     * @ penulis weijiang204321
     *
     */
    public class StaticRegisterBroadcastActivity memperluas Aktivitas {

    @Mengesampingkan
    void terlindungi onCreate (Bundle disimpanInstanceState) {
    super.onCreate (storedInstanceState);
    setContentView (R.layout.activity_main);
    Tombol btn = (Tombol) findViewById (R.id.btn);
    Untuk
    btn.setOnClickListener (OnClickListener baru () {
    @Mengesampingkan
    public void onClick (Lihat v) {
    // Gunakan cara statis untuk mendaftarkan siaran, Anda bisa menggunakan maksud tampilan untuk mengirim siaran
    Intent broadcast = new Intent ("com.broadcast.set.broadcast");
    sendBroadcast (siaran, null);
    }
    Untuk
    });
    }
    Untuk
    }


    Berlangganan di AndroidMainfest.xml:



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

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

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

    Jangan khawatir dengan konten lain untuk saat ini, seperti yang akan kita bicarakan nanti, di sini kita hanya fokus pada pendaftaran siaran statis


          
               
                   
               
           


    Mari kita lihat penerima siaran:

    paket com.broadcast.receiver;

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

    / **
     * Penerima siaran
     * @ penulis weijiang204321
     *
     */
    public class UnSortBroadcastReceiver memperluas BroadcastReceiver {

    @Mengesampingkan
    public void onReceive (Konteks konteks, Maksud maksud) {
    Log.e ("Intent_Action:", intent.getAction () + "");
    }

    }
    Logika dalam metode onReceive di penerima siaran sangat sederhana, yaitu mencetak konten Action.
    Jalankan programnya, hasilnya sangat sederhana, disini bukan gambarnya.

     

    Mari kita lihat langganan dinamis:


    paket com.broadcast.demo;

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

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

    / **
     * Gunakan cara dinamis untuk mendaftarkan siaran
     * @ penulis weijiang204321
     *
     */
    public class DynamicRegisterBroadcastActivity memperluas Aktivitas {
    Untuk
    String public static final NEW_LIFEFORM_DETECTED = "com.dxz.broadcasttest.NEW_LIFEFORM";
    penerima UnSortBroadcastReceiver yang dilindungi;
    Untuk
    @Mengesampingkan
    void terlindungi onCreate (Bundle disimpanInstanceState) {
    super.onCreate (storedInstanceState);
    setContentView (R.layout.activity_main);
    Tombol btn0 = (Tombol) findViewById (R.id.btn);
    btn0.setOnClickListener (OnClickListener baru () {
    public void onClick (Lihat v) {
    // Kirim siaran
    Maksud itu = Maksud baru (NEW_LIFEFORM_DETECTED);
    sendBroadcast (itu);
    }
    });
    }

    @Mengesampingkan
    void dilindungi onResume () {
    super.onResume ();
    // Daftar untuk siaran
    IntentFilter counterActionFilter = IntentFilter baru (NEW_LIFEFORM_DETECTED);
    receiver = new UnSortBroadcastReceiver ();
    registerReceiver (receiver, counterActionFilter);
    }

    @Mengesampingkan
    void terlindungi onPause () {
    super.onPause ();
    // Batalkan siaran
    unregisterReceiver (receiver);
    }
    }
    Di sini kita berlangganan penyiaran di onResume, dan berhenti berlangganan penyiaran di onPause.
    Ubah Aktivitas yang diluncurkan menjadi DynamicRegisterBroadcastActivity di AndroidMainfest.xml. Konten lainnya tidak perlu dimodifikasi. Jalankan programnya dan print hasilnya sangat sederhana, jadi saya tidak akan melihat gambarnya di sini.

     

    Mari kita lihat siaran berurutan dan siaran tidak berurutan

    Kami telah menyebutkan ini di awal, mari kita lihat penyiaran yang tidak teratur:

    Pertama kami mendefinisikan dua penerima siaran:

    Penerima siaran pertama:


    paket com.broadcast.receiver;

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

    / **
     * Penerima siaran A
     * @ penulis weijiang204321
     *
     */
    public class SortBroadcastReceiverA memperluas BroadcastReceiver {

    @Mengesampingkan
    public void onReceive (Konteks konteks, Maksud maksud) {
    Log.e ("Demo:", "penerima siaran A");
    }

    }
    Penerima siaran kedua:

    paket com.broadcast.receiver;

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

    / **
     * Penerima siaran B
     * @ penulis weijiang204321
     *
     */
    public class SortBroadcastReceiverB memperluas BroadcastReceiver {

    @Mengesampingkan
    public void onReceive (Konteks konteks, Maksud maksud) {
    Log.e ("Demo:", "Broadcast B");
    }

    Untuk
    Untuk
    }


    Berlangganan siaran di AndroidMainfest.xml


     
               
                   
               

           

               
                   
               

    hasil operasi:


    Hasil lari agak aneh. Mengapa penerima B di depan dan penerima A di belakang? Alasannya adalah saat kita berlangganan siaran di AndroidMainfest.xml, kita menyetel nilai atribut android: priority di maksud-filter. Semakin besar nilainya, semakin tinggi prioritasnya. , Prioritas penerima B adalah 1000, prioritas penerima A adalah 999, jadi B menerima siaran terlebih dahulu, lalu A menerimanya, tetapi tidak ada sambungan antara penerima B dan penerima A, dan tidak ada interaksi Ya, karena ini adalah siaran tidak teratur dan asinkron, kita dapat melakukan eksperimen dengan menambahkan kode ke metode onReceiver di B:

    abortBroadcast (); // Hentikan transmisi siaran ini

    hasil operasi:

     

    Kita dapat melihat kesalahan prompt, yaitu siaran yang tidak dipesan tidak diizinkan untuk menghentikan siaran. Faktanya, penghentian tidak ada gunanya, karena penerima A masih menerima siaran.

     

    Mari kita lihat penyiaran yang teratur, kodenya perlu diubah:

    Yang pertama adalah saat mengirim siaran:


    Intent broadcast = new Intent ("com.broadcast.set.broadcast");
    sendOrderedBroadcast (broadcast, null);
    Kemudian tambahkan metode untuk menghentikan siaran di penerima B:
    abortBroadcast ();

    Kode lain tidak perlu diubah, hasil operasinya:

     

    Yang ada hanya penerima B, penerima A tidak menerima siaran, karena siaran dihentikan di penerima B, dan penerima berikutnya tidak dapat menerimanya.

    Ubah kode di bawah ini:

    Penerima B:


    paket com.broadcast.receiver;

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

    / **
     * Penerima siaran B
     * @ penulis weijiang204321
     *
     */
    public class SortBroadcastReceiverB memperluas BroadcastReceiver {

    @Mengesampingkan
    public void onReceive (Konteks konteks, Maksud maksud) {
    Log.e ("Demo:", "penerima siaran B");
    Bundel bundel = Bundel baru ();
    bundle.putString ("next_receiver", "penerima siaran berikutnya");
    setResultExtras (bundle);
    }
    Untuk
    }
    Setelah B menerima siaran, ia menyimpan beberapa nilai dan meneruskannya ke penerima berikutnya.


    Kode penerima A:


    paket com.broadcast.receive

     

     

     

     

    Daftar semua Pertanyaan

    Nama panggilan

    Email

    Pertanyaan

    produk kami yang lain:

    Paket Peralatan Stasiun Radio FM Profesional

     



     

    Solusi IPTV Hotel

     


      Masukkan email untuk mendapatkan kejutan

      fmuser.org

      es.fmuser.org
      it.fmuser.org
      fr.fmuser.org
      de.fmuser.org
      af.fmuser.org -> Afrikans
      sq.fmuser.org -> Albania
      ar.fmuser.org -> Arab
      hy.fmuser.org -> Armenia
      az.fmuser.org -> Azerbaijan
      eu.fmuser.org -> Basque
      be.fmuser.org -> Belarusia
      bg.fmuser.org -> Bulgaria
      ca.fmuser.org -> Catalan
      zh-CN.fmuser.org -> Cina (Sederhana)
      zh-TW.fmuser.org -> Mandarin (Tradisional)
      hr.fmuser.org -> Kroasia
      cs.fmuser.org -> Ceko
      da.fmuser.org -> Denmark
      nl.fmuser.org -> Belanda
      et.fmuser.org -> Estonia
      tl.fmuser.org -> Filipina
      fi.fmuser.org -> Finlandia
      fr.fmuser.org -> Perancis
      gl.fmuser.org -> Galicia
      ka.fmuser.org -> Georgia
      de.fmuser.org -> Jerman
      el.fmuser.org -> Yunani
      ht.fmuser.org -> Kreol Haiti
      iw.fmuser.org -> Ibrani
      hi.fmuser.org -> Hindi
      hu.fmuser.org -> Hongaria
      is.fmuser.org -> Islandia
      id.fmuser.org -> Bahasa Indonesia
      ga.fmuser.org -> Irlandia
      it.fmuser.org -> Italia
      ja.fmuser.org -> Jepang
      ko.fmuser.org -> Korea
      lv.fmuser.org -> Latvia
      lt.fmuser.org -> Lithuania
      mk.fmuser.org -> Makedonia
      ms.fmuser.org -> Melayu
      mt.fmuser.org -> Malta
      no.fmuser.org -> Norwegia
      fa.fmuser.org -> Persia
      pl.fmuser.org -> Polandia
      pt.fmuser.org -> Portugis
      ro.fmuser.org -> Rumania
      ru.fmuser.org -> Rusia
      sr.fmuser.org -> Serbia
      sk.fmuser.org -> Slowakia
      sl.fmuser.org -> Slovenia
      es.fmuser.org -> Spanyol
      sw.fmuser.org -> Swahili
      sv.fmuser.org -> Swedia
      th.fmuser.org -> Thailand
      tr.fmuser.org -> Turki
      uk.fmuser.org -> Ukraina
      ur.fmuser.org -> Urdu
      vi.fmuser.org -> Vietnam
      cy.fmuser.org -> Welsh
      yi.fmuser.org -> Yiddish

       
  •  

    FMUSER Wirless Mengirim Video Dan Audio Lebih Mudah!

  • Kontak

    Alamat:
    No.305 Kamar HuiLan Building No.273 Huanpu Road Guangzhou China 510620

    E-mail:
    [email dilindungi]

    Telp / WhatApps:
    +8618078869184

  • Kategori

  • Buletin

    NAMA DEPAN ATAU LENGKAP

    E-mail

  • solusi paypal  Western UnionBank OF China
    E-mail:[email dilindungi]   WhatsApp: +8618078869184 Skype: sky198710021 Ngobrol denganku
    Copyright 2006-2020 Powered By www.fmuser.org

    Hubungi Kami