Bagaimana cara menggunakan / mencari LocalBroadcastManager
seperti yang dijelaskan dalam google docs dan Service broadcast doc ?
Saya sudah mencoba google, tetapi tidak ada kode untuk memulai?
Dokumen mengatakan bahwa saya harus menggunakannya jika saya ingin melakukan siaran internal dengan dalam proses aplikasi saya, tetapi saya tidak tahu di mana mencarinya.
Ada bantuan / komentar?
Pembaruan : Saya tahu cara menggunakan Siaran tetapi tidak tahu cara mendapatkan LocalBroadcastManager
tersedia di proyek saya.
android
broadcastreceiver
waqaslam
sumber
sumber
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter("custom-event-name"));
LocalBroadcastManager
telah ditinggalkan. Saya mengganti milik saya dengan perpustakaan EventBus yang jauh lebih bagus, imo.Jawaban:
Saya tetap akan menjawab ini. Untuk berjaga-jaga jika seseorang membutuhkannya.
ReceiverActivity.java
Aktivitas yang memantau notifikasi untuk acara yang dinamai
"custom-event-name"
.SenderActivity.java
Aktivitas kedua yang mengirim / menyiarkan notifikasi.
Dengan kode di atas, setiap kali tombol
R.id.button_send
diklik, Intent disiarkan dan diterima olehmMessageReceiver
dalamReceiverActivity
.Output debug akan terlihat seperti ini:
sumber
onDestroy()
tidak dijamin dipanggil !!! Anda harus menggunakanonPause()
(karena hanyaonPause()
dijamin) danonResume()
(karena itu cocok untukonPause()
)onDestroy()
tidak masalah Kasus di mana itu tidak dipanggil adalah ketika aplikasi terbunuh, dan tidak masalah jika Anda tidak membatalkan pendaftaran dalam kasus itu karena bahkan tidak ada daftar penerima terdaftar yang selamat.Saya lebih suka menjawab secara komprehensif.
LocalbroadcastManager termasuk dalam Android 3.0 dan di atasnya sehingga Anda harus menggunakan perpustakaan dukungan v4 untuk rilis awal. lihat instruksi di sini
Buat penerima siaran:
Daftarkan penerima Anda di onResume aktivitas seperti:
batalkan pendaftaran penerima di onPause:
Sekarang setiap kali siaran lokal dikirim dari aktivitas atau layanan aplikasi, onRiveive on onNotice akan dipanggil :).
Sunting: Anda dapat membaca tutorial lengkap di sini LocalBroadcastManager: Pengalihan pesan aplikasi intra
sumber
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(onNotice);
danLocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(onNotice);
onStop
karena di Android API 24+ dengan "Multi-Window / Split-View" (diaktifkan secara default pada API 26+ affaicr), aktivitas yang tidak berinteraksi dengan berada dalam keadaan jeda. Sumber: developer.android.com/guide/topics/ui/…Pada saat Menerima:
Kemudian menangani data maksud masuk di onReceive.
Di Akhir Pengiriman:
sumber
Di Eclipse, akhirnya saya harus menambahkan Perpustakaan Kompatibilitas / Dukungan dengan mengklik kanan proyek saya dan memilih:
Setelah ditambahkan, maka saya bisa menggunakan
LocalBroadcastManager
kelas dalam kode saya.sumber
Bagaimana cara mengubah siaran global Anda ke LocalBroadcast
1) Buat Mesin Virtual
2) Untuk mendaftar BroadcastReceiver
3) Untuk mengirim pesan siaran
4) Untuk membatalkan pendaftaran pesan siaran
sumber
manajer siaran lokal sudah ditinggalkan, gunakan implementasi dari pola yang dapat diamati sebagai gantinya.
androidx.localbroadcastmanager
sedang tidak digunakan dalam versi 1.1.0Alasan
LocalBroadcastManager
adalah bus peristiwa di seluruh aplikasi dan mencakup pelanggaran lapisan di aplikasi Anda; komponen apa pun dapat mendengarkan acara dari komponen lain mana pun. Ini mewarisi batasan use-case yang tidak perlu dari sistem BroadcastManager; pengembang harus menggunakan Intent meskipun objek hanya hidup dalam satu proses dan tidak pernah meninggalkannya. Untuk alasan yang sama, itu tidak mengikuti BroadcastManager bijaksana.Ini menambah pengalaman pengembang yang membingungkan.
Penggantian
Anda dapat mengganti penggunaan
LocalBroadcastManager
dengan implementasi lain dari pola yang dapat diamati. Tergantung pada kasus penggunaan Anda, opsi yang sesuai mungkinLiveData
atau aliran reaktif.Keuntungan dari LiveData
Anda dapat memperluas
LiveData
objek menggunakan pola tunggal untuk membungkus layanan sistem sehingga mereka dapat dibagikan di aplikasi Anda. TheLiveData
objek menghubungkan ke layanan sistem sekali, dan kemudian pengamat setiap yang perlu sumber daya hanya dapat menontonLiveData
objek.The
observe()
Metode melewati fragmen, yang merupakan contoh dariLifecycleOwner
, sebagai argumen pertama. Melakukan hal itu menunjukkan bahwa pengamat ini terikat padaLifecycle
objek yang terkait dengan pemilik, yang berarti:Jika objek Siklus Hidup tidak dalam keadaan aktif, maka pengamat tidak dipanggil bahkan jika nilainya berubah.
Setelah objek Siklus Hidup dihancurkan, pengamat akan dihapus secara otomatis
Fakta bahwa
LiveData
objek sadar siklus berarti Anda dapat membaginya di antara beberapa aktivitas, fragmen, dan layanan.sumber
Ketika Anda akan bermain cukup dengan LocalBroadcastReceiver saya akan menyarankan Anda untuk mencoba EventBus Green Robot - Anda pasti akan menyadari perbedaan dan kegunaannya dibandingkan dengan LBR. Lebih sedikit kode, dapat disesuaikan tentang utas penerima (UI / Bg), memeriksa ketersediaan penerima, acara tempel, acara dapat digunakan sebagai pengiriman data dll.
sumber
Contoh Kegiatan dan Layanan yang mengimplementasikan LocalBroadcastManager dapat ditemukan di dokumen pengembang . Saya pribadi merasa sangat berguna.
EDIT: Tautan sejak itu telah dihapus dari situs, tetapi datanya adalah sebagai berikut: https://github.com/carrot-garden/android_maven-android-plugin-samples/blob/master/support4demos/src/com/ contoh / android / supportv4 / konten / LocalServiceBroadcaster.java
sumber
sumber
Dengan mendeklarasikan satu di file AndroidManifest.xml Anda dengan tag (juga disebut statis)
Anda akan melihat bahwa penerima siaran yang dinyatakan di atas memiliki properti yang diekspor = "true". Atribut ini memberi tahu penerima bahwa ia dapat menerima siaran dari luar lingkup aplikasi.
2. Atau secara dinamis dengan mendaftarkan sebuah instance dengan registerReceiver (apa yang dikenal sebagai konteks terdaftar)
Ada tiga cara untuk mengirim siaran:
Metode sendOrderedBroadcast, pastikan untuk mengirim siaran hanya ke satu penerima pada satu waktu. Setiap siaran pada gilirannya, meneruskan data ke yang mengikutinya, atau untuk menghentikan penyebaran siaran ke penerima yang mengikuti.
SendBroadcast mirip dengan metode yang disebutkan di atas, dengan satu perbedaan. Semua penerima siaran menerima pesan dan tidak saling bergantung.
Metode LocalBroadcastManager.sendBroadcast hanya mengirimkan siaran ke penerima yang ditentukan di dalam aplikasi Anda dan tidak melebihi ruang lingkup aplikasi Anda.
sumber
kita juga bisa menggunakan antarmuka yang sama dengan broadcastManger di sini saya membagikan kode testd untuk broadcastManager tetapi dengan antarmuka.
pertama-tama buat antarmuka seperti:
2-ini adalah kelas pertama yang membutuhkan implementasi
3-di sini adalah kelas kedua yang mengimplementasikan antarmuka yang sama yang metode panggilannya secara otomatis
jadi dengan pendekatan ini kita bisa menggunakan antarmuka yang berfungsi sama dengan broadcastManager.
sumber