Saya perlu memeriksa apakah penerima terdaftar saya masih terdaftar jika tidak, bagaimana cara saya memeriksanya?
254
Saya perlu memeriksa apakah penerima terdaftar saya masih terdaftar jika tidak, bagaimana cara saya memeriksanya?
Jawaban:
Saya tidak yakin API menyediakan API secara langsung, jika Anda mempertimbangkan utas ini :
sumber
Tidak ada fungsi API untuk memeriksa apakah penerima terdaftar. Solusinya adalah dengan meletakkan kode Anda di a
try catch block as done below.
sumber
null
. Tapi seperti yang Anda tunjukkan, saya akan ikuttry catch
. Konyol.solusi paling sederhana
dalam penerima:
dalam kode:
iklan 1
- sebagai balasan ke:
- "cara yang lebih ellegant" menambahkan metode pada receiver untuk mendaftar dan mengatur flag
@amin - lihat masa pakai kode (bukan sistem terdaftar dengan entri manifes) penerima terdaftar :)
sumber
Saya menggunakan solusi ini
sumber
Anda memiliki beberapa opsi
Anda dapat meletakkan bendera di kelas atau aktivitas Anda. Masukkan variabel boolean ke dalam kelas Anda dan lihat bendera ini untuk mengetahui apakah Anda memiliki Receiver terdaftar.
Buat kelas yang memperluas Penerima dan di sana Anda dapat menggunakan:
Pola singleton untuk hanya memiliki satu instance dari kelas ini dalam proyek Anda.
Terapkan metode untuk mengetahui apakah Penerima mendaftar.
sumber
Anda harus menggunakan coba / tangkap:
sumber
Anda dapat melakukannya dengan mudah ....
1) buat variabel boolean ...
2) Ketika Anda mendaftarkan Penerima Siaran Anda, atur ke TRUE
3) Di onPause () lakukan itu ...
Hanya itu, dan sekarang, Anda tidak akan menerima lebih banyak pesan kesalahan pengecualian pada onPause ().
Tip1: Selalu gunakan unregisterReceiver () di onPause () tidak di onDestroy () Tip2: Jangan lupa untuk mengatur variabel bolBroadcastRegistred ke FALSE ketika menjalankan unregisterReceive ()
Keberhasilan!
sumber
Jika Anda meletakkan ini di metode onDestroy atau onStop. Saya pikir ketika aktivitas telah dibuat lagi MessageReciver tidak sedang dibuat.
sumber
Saya menggunakan Intent untuk memberi tahu Penerima Siaran tentang instance Handler dari utas Aktivitas utama dan menggunakan Pesan untuk meneruskan pesan ke Aktivitas utama
Saya telah menggunakan mekanisme tersebut untuk memeriksa apakah Siaran Penerima sudah terdaftar atau belum. Kadang-kadang diperlukan ketika Anda mendaftarkan Penerima Siaran Anda secara dinamis dan tidak ingin membuatnya dua kali atau Anda hadir kepada pengguna jika Penerima Siaran sedang berjalan.
Aktifitas utama:
Penerima siaran:
sumber
Secara pribadi saya menggunakan metode memanggil unregisterReceiver dan menelan pengecualian jika dilempar. Saya setuju ini jelek tapi metode terbaik saat ini disediakan.
Saya telah mengajukan permintaan fitur untuk mendapatkan metode boolean untuk memeriksa apakah penerima terdaftar ditambahkan ke Android API. Harap dukung di sini jika Anda ingin melihatnya ditambahkan: https://code.google.com/p/android/issues/detail?id=73718
sumber
Saya mendapatkan masalah Anda, saya menghadapi masalah yang sama di Aplikasi saya. Saya menelepon registerReceiver () beberapa kali dalam aplikasi.
Solusi sederhana untuk masalah ini adalah memanggil registerReceiver () di Kelas Aplikasi Kustom Anda. Ini akan memastikan bahwa penerima Siaran Anda akan dipanggil hanya satu di seluruh siklus hidup Aplikasi Anda.
sumber
Ini adalah bagaimana saya melakukannya, ini adalah versi modifikasi dari jawaban yang diberikan oleh ceph3us dan diedit oleh slinden77 (antara lain saya telah menghapus nilai-nilai pengembalian metode yang tidak saya butuhkan):
Kemudian pada kelas Activity:
sumber
saya meletakkan kode ini di aktivitas orang tua saya
List RegistReceivers = ArrayList baru <> ();
sumber
Bagi saya yang berikut ini berfungsi:
sumber
Inilah yang saya lakukan untuk memeriksa apakah Broadcaster sudah terdaftar, bahkan jika Anda menutup aplikasi Anda (selesai ())
Pertama kali menjalankan aplikasi Anda, kirim siaran terlebih dahulu itu akan mengembalikan benar / salah tergantung pada apakah penyiar Anda masih berjalan atau tidak.
Penyiar saya
MainActivity saya
sumber
Anda dapat menggunakan Belati untuk membuat referensi penerima itu.
Pertama berikan itu:
Kemudian masukkan di mana Anda butuhkan (menggunakan
constructor
atau bidanginjection
)dan cukup berikan
registerReceiver
.Juga taruh di
try/catch
blok juga.sumber
sumber
Cukup periksa NullPointerException. Jika penerima tidak ada, maka ...
sumber