FMUSER Wirless Menghantar Video Dan Audio Lebih Mudah!

[e-mel dilindungi] WhatsApp + 8618078869184
Bahasa

    Penjelasan terperinci mengenai Siaran di Android

     

    Penyiaran terbahagi kepada dua jenis: "Siaran biasa" dan "Siaran teratur". Siaran biasa benar-benar tidak segerak dan boleh diterima oleh semua penerima siaran pada masa yang sama (secara logik). Kecekapan penyampaian mesej agak tinggi, tetapi kelemahannya ialah penerima tidak dapat meneruskan hasil pemprosesan ke penerima berikutnya, dan tidak dapat dihentikan. Penyebaran Maksud Siaran; namun, siaran yang dipesan adalah berdasarkan keutamaan yang dinyatakan oleh penerima (diisytiharkan dalam android: atribut keutamaan elemen niat-penapis, semakin besar bilangannya, semakin tinggi keutamaan, julat nilai: -1000 hingga 1000. Ini juga mungkin Panggil setPriority () objek IntentFilter untuk ditetapkan), dan penerima akan menerima siaran secara bergantian. Sebagai contoh, jika tahap A lebih tinggi daripada B, dan tahap B lebih tinggi daripada C, maka siaran pertama dihantar ke A, kemudian ke B, dan akhirnya ke C. Setelah A mendapat siaran, ia dapat menyimpan data dalam siaran. Semasa siaran dihantar ke B, B dapat memperoleh data yang disimpan oleh A dari siaran.

     

    Context.sendBroadcast ()

       Apa yang dihantar adalah siaran biasa, dan semua pelanggan berpeluang memperoleh dan memprosesnya.

     

    Context.sendOrderedBroadcast ()

       Menghantar adalah siaran yang teratur. Sistem akan melaksanakan penerima satu persatu mengikut keutamaan yang dinyatakan oleh penerima. Penerima sebelumnya mempunyai hak untuk menghentikan siaran (BroadcastReceiver.abortBroadcast ()). Sekiranya siaran ditamatkan oleh penerima sebelumnya, yang terakhir Penerima tidak lagi dapat menerima siaran. Untuk siaran yang dipesan, penerima sebelumnya dapat menyimpan hasil pemprosesan dalam Intent siaran, dan kemudian menyebarkannya ke penerima seterusnya.

     
    Penerima siaran (BroadcastReceiver) digunakan untuk menerima Intent siaran, dan pengiriman Intent siaran direalisasikan dengan memanggil Context.sendBroadcast () dan Context.sendOrderedBroadcast (). Biasanya Intent siaran boleh diterima oleh beberapa penerima siaran yang melanggan Intent ini. Ciri ini serupa dengan penerima mesej Topik di JMS. Untuk melaksanakan kaedah penerima siaran adalah seperti berikut:

     

    Langkah pertama: tentukan penerima siaran, mewarisi BroadcastReceiver, dan menulis semula kaedah onReceive ().

    kelas awam IncomeSMSReceiver meluasBroadcastReceiver {
      @ Override public void onReceive (Kontekskonteks, Sengaja) {
      }
    }

     

    Langkah 2: Langgan siaran Maksud minat, terdapat dua kaedah langganan:

    Jenis pertama: gunakan kod untuk melanggan (langganan dinamik)

    IntentFilter filter = newIntentFilter ("android.provider.Telephony.SMS_RECEIVED");
    PenerimaSMSReceiver masuk = baruInssmSReceiver yang baru ();
    registerReceiver (penerima, penapis);

     

    Jenis kedua: Langgan di simpul dalam fail AndroidManifest.xml (langganan statik)


      
           
      


    Mari kita perhatikan perbezaan antara langganan siaran dinamik dan langganan siaran statik:
    Siaran langganan statik juga disebut: siaran penduduk. Apabila aplikasi anda ditutup, jika ada mesej siaran, penerima siaran yang anda tulis juga dapat menerimanya. Kaedah pendaftarannya adalah AndroidManifast dalam aplikasi anda. .xml untuk langganan.

     

    Siaran langganan dinamik juga dipanggil: siaran bukan pemastautin. Apabila aplikasi berakhir, siaran secara semula jadi akan hilang. Sebagai contoh, anda melanggan siaran di onCreate atau onResume dalam aktiviti tersebut, dan anda mesti membatalkan langganan siaran di onDestory atau onPause. Jika tidak, pengecualian akan dilaporkan, jadi penerima siaran anda adalah bukan pemastautin.

     

    Terdapat satu lagi perincian di sini iaitu dua kaedah langganan. Semasa menghantar siaran, anda perlu memperhatikan: Kaedah niat tersirat digunakan untuk pendaftaran dinamis, jadi anda perlu menggunakan maksud tersirat untuk mengirim ketika mengirim siaran. Jika tidak, penerima siaran tidak akan dapat menerima siaran tersebut. Perhatikan perkara ini. Tetapi ketika melanggan secara statik, kerana dilanggan di AndroidMainfest.xml, ada kemungkinan menggunakan Intent paparan dan Intent tersirat ketika mengirim siaran (tentu saja ini hanya untuk penerima siaran yang ditentukan oleh kita sendiri), jadi sekiranya berlaku, kita biasanya menggunakan implisit Niat untuk menghantar siaran.

     

    Mari lihat contoh:

    Lihat struktur projek:

     

    Lihat siaran langganan statik:
    pakej com.broadcast.demo;

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

    import com.example.androidbroadcastdemo.R;

    / **
     * Siaran langganan statik
     * @pengarang weijiang204321
     *
     */
    kelas awam StaticRegisterBroadcastActivity memperluaskan Aktiviti {

    @Selamat
    dilindungi void onCreate (Bundle disimpanInstanceState) {
    super.onCreate (disimpanInstanceState);
    setContentView (R.layout.activity_main);
    Butang btn = (Butang) findViewById (R.id.btn);
    Untuk
    btn.setOnClickListener (OnClickListener baru () {
    @Selamat
    kekosongan awam onClick (Lihat v) {
    // Gunakan cara statis untuk mendaftarkan siaran, anda dapat menggunakan maksud tampilan untuk mengirim siaran
    Siaran niat = Niat baru ("com.broadcast.set.broadcast");
    sendBroadcast (siaran, null);
    }
    Untuk
    });
    }
    Untuk
    }


    Langgan di AndroidMainfest.xml:



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

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

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

    Jangan bimbang tentang kandungan lain buat masa ini, kerana kita akan membincangkannya nanti, di sini kita hanya menumpukan pada pendaftaran siaran statik


          
               
                   
               
           


    Mari lihat penerima siaran:

    pakej com.broadcast.receiver;

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

    / **
     * Penerima siaran
     * @pengarang weijiang204321
     *
     */
    kelas awam UnSortBroadcastReceiver memperluas BroadcastReceiver {

    @Selamat
    kekosongan awam onReceive (Konteks konteks, maksud niat) {
    Log.e ("Intent_Action:", intent.getAction () + "");
    }

    }
    Logik dalam kaedah onReceive dalam penerima siaran sangat mudah, iaitu mencetak kandungan Tindakan.
    Jalankan program, hasilnya sangat mudah, ini bukan gambarnya.

     

    Mari lihat langganan dinamik:


    pakej com.broadcast.demo;

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

    import com.broadcast.receiver.UnsortBroadcastReceiver;
    import com.example.androidbroadcastdemo.R;

    / **
     * Gunakan cara dinamik untuk mendaftar siaran
     * @pengarang weijiang204321
     *
     */
    kelas awam DynamicRegisterBroadcastActivity meluaskan Aktiviti {
    Untuk
    rentetan akhir statik awam NEW_LIFEFORM_DETECTED = "com.dxz.broadcasttest.NEW_LIFEFORM";
    penerima UnSortBroadcastReceiver yang dilindungi;
    Untuk
    @Selamat
    dilindungi void onCreate (Bundle disimpanInstanceState) {
    super.onCreate (disimpanInstanceState);
    setContentView (R.layout.activity_main);
    Butang btn0 = (Butang) cariViewById (R.id.btn);
    btn0.setOnClickListener (OnClickListener baru () {
    kekosongan awam onClick (Lihat v) {
    // Hantar siaran
    Maksudnya = Niat baru (NEW_LIFEFORM_DETECTED);
    sendBroadcast (itu);
    }
    });
    }

    @Selamat
    kekosongan dilindungi onResume () {
    super.onResume ();
    // Daftar untuk siaran
    IntentFilter counterActionFilter = IntentFilter baru (NEW_LIFEFORM_DETECTED);
    penerima = UnSortBroadcastReceiver baru ();
    registerReceiver (penerima, counterActionFilter);
    }

    @Selamat
    tidak sah dilindungiPause () {
    super.onPause ();
    // Batalkan siaran
    unregisterReceiver (penerima);
    }
    }
    Di sini kita melanggan siaran di onResume, dan berhenti berlangganan penyiaran di onPause.
    Tukar Aktiviti yang dilancarkan ke DynamicRegisterBroadcastActivity di AndroidMainfest.xml. Kandungan lain tidak perlu diubah suai. Jalankan program dan cetak hasilnya sangat mudah, jadi saya tidak akan melihat gambarnya di sini.

     

    Mari kita lihat penyiaran yang diperintahkan dan penyiaran yang tidak tersusun

    Kami telah menyebutnya pada awalnya, mari kita lihat penyiaran yang tidak teratur:

    Mula-mula kita menentukan dua penerima siaran:

    Penerima siaran pertama:


    pakej com.broadcast.receiver;

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

    / **
     * Penerima siaran A
     * @pengarang weijiang204321
     *
     */
    kelas awam SortBroadcastReceiverA meluaskan BroadcastReceiver {

    @Selamat
    kekosongan awam onReceive (Konteks konteks, maksud niat) {
    Log.e ("Demo:", "penerima siaran A");
    }

    }
    Penerima siaran kedua:

    pakej com.broadcast.receiver;

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

    / **
     * Penerima siaran B
     * @pengarang weijiang204321
     *
     */
    kelas awam SortBroadcastReceiverB meluaskan BroadcastReceiver {

    @Selamat
    kekosongan awam onReceive (Konteks konteks, maksud niat) {
    Log.e ("Demo:", "Siaran B");
    }

    Untuk
    Untuk
    }


    Langgan siaran di AndroidMainfest.xml


     
               
                   
               

           

               
                   
               

    hasil operasi:


    Hasil berjalan agak pelik. Mengapa penerima B di depan dan penerima A di belakang? Sebabnya ialah apabila kita melanggan siaran di AndroidMainfest.xml, kita menetapkan nilai atribut android: priority di filter-intent. Semakin besar nilainya, semakin tinggi keutamaannya. , Keutamaan penerima B adalah 1000, keutamaan penerima A adalah 999, jadi B menerima siaran terlebih dahulu, dan kemudian A menerimanya, tetapi tidak ada hubungan antara penerima B dan penerima A, dan tidak ada interaksi Ya, kerana ini adalah siaran di luar pesanan dan tidak segerak, kita dapat melakukan eksperimen dengan menambahkan kod ke kaedah onReceiver di B:

    abortBroadcast (); // Tamatkan penghantaran siaran ini

    hasil operasi:

     

    Kita dapat melihat kesalahan segera, iaitu siaran yang tidak dipesan tidak dibenarkan menghentikan siaran. Sebenarnya, penamatan tidak berguna, kerana penerima A masih menerima siaran.

     

    Mari kita lihat penyiaran yang teratur, kodnya perlu diubah suai:

    Yang pertama adalah semasa menghantar siaran:


    Siaran niat = Niat baru ("com.broadcast.set.broadcast");
    sendOrderedBroadcast (siaran, null);
    Kemudian tambahkan kaedah untuk menghentikan siaran di penerima B:
    abortBroadcast ();

    Kod lain tidak perlu diubah suai, hasil operasi:

     

    Hanya ada penerima B, penerima A tidak menerima siaran, kerana siaran ditamatkan di penerima B, dan penerima berikutnya tidak dapat menerimanya.

    Ubah kod di bawah:

    Penerima B:


    pakej com.broadcast.receiver;

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

    / **
     * Penerima siaran B
     * @pengarang weijiang204321
     *
     */
    kelas awam SortBroadcastReceiverB meluaskan BroadcastReceiver {

    @Selamat
    kekosongan awam onReceive (Konteks konteks, maksud niat) {
    Log.e ("Demo:", "penerima siaran B");
    Bundle bundle = Bundle baru ();
    bundle.putString ("next_receiver", "penerima siaran seterusnya");
    setResultExtras (bundle);
    }
    Untuk
    }
    Setelah B menerima siaran, ia menyimpan beberapa nilai dan meneruskannya ke penerima seterusnya.


    Kod Penerima A:


    pakej com.broadcast.receive

     

     

     

     

    Senaraikan semua Soalan

    Nickname

    E-mel

    Sering Ditanya

    produk kami yang lain:

    Pakej Peralatan Stesen Radio FM Profesional

     



     

    Penyelesaian IPTV Hotel

     


      Masukkan e-mel untuk mendapatkan kejutan

      fmuser.org

      es.fmuser.org
      it.fmuser.org
      fr.fmuser.org
      de.fmuser.org
      af.fmuser.org -> Orang Afrika
      sq.fmuser.org -> Bahasa Albania
      ar.fmuser.org -> Bahasa Arab
      hy.fmuser.org -> Armenia
      az.fmuser.org -> Azerbaijan
      eu.fmuser.org -> Basque
      be.fmuser.org -> Belarus
      bg.fmuser.org -> Bulgaria
      ca.fmuser.org -> Bahasa Catalan
      zh-CN.fmuser.org -> Bahasa Cina (Ringkas)
      zh-TW.fmuser.org -> Bahasa Cina (Tradisional)
      hr.fmuser.org -> Bahasa Croatia
      cs.fmuser.org -> Bahasa Czech
      da.fmuser.org -> Denmark
      nl.fmuser.org -> Belanda
      et.fmuser.org -> Estonia
      tl.fmuser.org -> Orang Filipina
      fi.fmuser.org -> Bahasa Finland
      fr.fmuser.org -> Bahasa Perancis
      gl.fmuser.org -> orang Galicia
      ka.fmuser.org -> Orang Georgia
      de.fmuser.org -> Jerman
      el.fmuser.org -> Greek
      ht.fmuser.org -> Haitian Creole
      iw.fmuser.org -> Bahasa Ibrani
      hi.fmuser.org -> Bahasa Hindi
      hu.fmuser.org -> Bahasa Hungary
      is.fmuser.org -> Bahasa Iceland
      id.fmuser.org -> Bahasa Indonesia
      ga.fmuser.org -> Ireland
      it.fmuser.org -> Bahasa Itali
      ja.fmuser.org -> Jepun
      ko.fmuser.org -> Bahasa Korea
      lv.fmuser.org -> Bahasa Latvia
      lt.fmuser.org -> Bahasa Lithuania
      mk.fmuser.org -> orang Macedonia
      ms.fmuser.org -> Bahasa Melayu
      mt.fmuser.org -> Malta
      no.fmuser.org -> Bahasa Norway
      fa.fmuser.org -> Parsi
      pl.fmuser.org -> Bahasa Poland
      pt.fmuser.org -> Portugis
      ro.fmuser.org -> Romania
      ru.fmuser.org -> Rusia
      sr.fmuser.org -> Bahasa Serbia
      sk.fmuser.org -> Bahasa Slovak
      sl.fmuser.org -> Bahasa Slovenia
      es.fmuser.org -> Sepanyol
      sw.fmuser.org -> Swahili
      sv.fmuser.org -> Sweden
      th.fmuser.org -> Thai
      tr.fmuser.org -> Turki
      uk.fmuser.org -> Ukraine
      ur.fmuser.org -> Bahasa Urdu
      vi.fmuser.org -> Vietnam
      cy.fmuser.org -> Wales
      yi.fmuser.org -> Bahasa Yiddish

       
  •  

    FMUSER Wirless Menghantar Video Dan Audio Lebih Mudah!

  • Hubungi Kami

    alamat:
    No.305 Bilik HuiLan Bangunan No.273 Huanpu Road Guangzhou China 510620

    E-mel:
    [e-mel dilindungi]

    Tel / WhatApps:
    +8618078869184

  • Kategori

  • Buletin

    NAMA PERTAMA ATAU PENUH

    E-mel

  • penyelesaian paypal  Western UnionBank of China
    E-mel:[e-mel dilindungi]   WhatsApp: +8618078869184 Skype: sky198710021 Berbual dengan saya
    Copyright 2006-2020 Powered By www.fmuser.org

    Hubungi Kami