Saya ingin tahu apa cara / cara terbaik mendaftarkan penerima siaran secara terprogram. Saya ingin mendaftarkan penerima tertentu sesuai dengan pilihan pengguna.
Karena pendaftaran dilakukan melalui file manifes, saya bertanya-tanya apakah ada cara yang tepat untuk mencapai ini dalam kode.
android
broadcastreceiver
CoolStraw
sumber
sumber
Jawaban:
Sepertinya Anda ingin mengontrol apakah komponen yang diterbitkan dalam manifes Anda aktif, tidak secara dinamis mendaftarkan penerima (melalui Context.registerReceiver ()) saat berjalan.
Jika demikian, Anda dapat menggunakan PackageManager.setComponentEnabledSetting () untuk mengontrol apakah komponen ini aktif:
http://developer.android.com/reference/android/content/pm/PackageManager.html#setComponentEnabledSetting(android.content.ComponentName, int, int)
Catatan jika Anda hanya tertarik menerima siaran saat Anda menjalankan, lebih baik menggunakan registerReceiver (). Komponen penerima terutama berguna ketika Anda perlu memastikan aplikasi Anda diluncurkan setiap kali siaran dikirim.
sumber
Dalam
onCreate
metode Anda, Anda dapat mendaftarkan penerima seperti ini:Ingatlah untuk menjalankan ini dalam
onDestroy
metode:sumber
onDestroy()
akan dipanggil, sehingga menciptakan potensi kebocoran memori. Lebih baik mendaftar / tidak mendaftar dionStart()
/onStop()
.Satu poin penting yang orang lupa sebutkan adalah waktu hidup
Broadcast Receiver
. Perbedaan pemrograman mendaftar itu dari mendaftar di AndroidManifest.xml adalah itu. Dalam file manifes, itu tidak bergantung pada waktu hidup aplikasi. Sementara ketika mendaftar secara program itu tergantung pada waktu hidup aplikasi. Ini berarti bahwa jika Anda mendaftar di AndroidManifest.xml , Anda dapat menangkap maksud yang disiarkan meskipun aplikasi Anda tidak berjalan.Sunting: Catatan yang disebutkan tidak lagi berlaku untuk Android 3.1, sistem Android mengecualikan semua penerima dari menerima maksud secara default jika aplikasi yang sesuai tidak pernah dimulai oleh pengguna atau jika pengguna secara eksplisit menghentikan aplikasi melalui menu Android (dalam Kelola → Aplikasi). https://developer.android.com/about/versions/android-3.1.html
Ini adalah fitur keamanan tambahan karena pengguna dapat yakin bahwa hanya aplikasi yang ia mulai akan menerima maksud siaran.
Jadi itu dapat dipahami karena penerima yang terdaftar secara program di Aplikasi
onCreate()
akan memiliki efek yang sama dengan yang dinyatakan dalam AndroidManifest.xml dari Android 3.1 di atas.sumber
Tetapkan penerima siaran di mana saja di Activity / Fragment seperti ini:
Tentukan IntentFilter di
onCreate()
Sekarang daftarkan BroadcastReciever
onResume()
dan Batalkan registrasi dionPause()
[karena tidak ada penggunaan siaran jika aktivitas dijeda].Untuk tutorial detail, lihat penerima siaran-dua cara untuk mengimplementasikan .
sumber
sumber
Menurut Mendengarkan dan Menyiarkan Pesan Global, dan Mengatur Alarm di Tugas Umum dan Cara Melakukannya di Android :
Lihatlah registerReceiver (penerima BroadcastReceiver, filter IntentFilter) untuk info lebih lanjut.
sumber
context.registerReceiver
tetapi tidak bisa dipanggil tolong lihat pertanyaan ini stackoverflow.com/questions/13238600/…Ini adalah praktik terbaik untuk selalu memberikan izin saat mendaftarkan penerima, jika tidak, Anda akan menerima untuk aplikasi apa pun yang mengirimkan maksud yang cocok. Ini dapat memungkinkan aplikasi jahat untuk menyiarkan ke penerima Anda.
sumber
untuk LocalBroadcastManager
dan mendaftar
onResume
dan batalkan registrasi
onStop
dan menerimanya ..
di mana IntentFilter berada
sumber
Dua pilihan
registerReceiver(...
) dionStart()
danunregisterReceiver(...)
dionStop()
registerReceiver(...)
masukonCreate(...)
danunregisterReceiver(...)
masukonDestroy()
Bonus:
Jika Anda tidak ingin menulis kode boilerplate untuk mendaftar dan membatalkan registrasi BroadcastReceiver lagi dan lagi di setiap Kegiatan,
Berikut ini cuplikan kode:
Lihat kode lengkap:
SINI
sumber
Buat penerima siaran
[BroadcastReceiver (Diaktifkan = benar, Diekspor = salah)]
Dari aktivitas Anda, tambahkan kode ini:
sumber