Lebih
Cara untuk memeriksa jika Penerima terdaftar di Android?
Saya perlu memeriksa jika saya terdaftar penerima masih terdaftar jika tidak bagaimana saya memeriksa setiap metode?
235
17
Tidak ada API yang berfungsi untuk memeriksa apakah penerima terdaftar. Solusinya adalah menempatkan kode dalam
mencoba menangkap blok seperti yang dilakukan di bawah.
Saya tidak yakin API menyediakan langsung API, jika anda mempertimbangkan thread ini:
solusi yang paling sederhana
penerima:
dalam kode:
ad 1
-- di balas ke:
-- "lebih ellegant cara" menambahkan metode dalam receiver untuk mendaftarkan dan menetapkan bendera
@amin - lihat seumur hidup dalam kode (tidak terdaftar pada sistem dengan entri manifest) yang terdaftar penerima :)
Saya menggunakan solusi ini
Anda memiliki beberapa pilihan
Anda dapat menempatkan bendera ke kelas atau kegiatan. Menempatkan variabel boolean ke kelas dan melihat bendera ini untuk mengetahui jika anda memiliki Penerima yang terdaftar.
Membuat kelas yang meluas Penerima dan di sana anda dapat menggunakan:
Singleton pattern untuk hanya memiliki satu instance dari kelas ini dalam proyek anda.
Menerapkan metode untuk mengetahui jika Penerima mendaftar.
Anda harus menggunakan try/catch:
Anda dapat melakukannya dengan mudah....
Hanya itu, dan sekarang, anda tidak akan menerima pesan galat pengecualian pada onPause().
Tip1: Selalu gunakan unregisterReceiver() di onPause() tidak onDestroy() Tip2: Jangan lupa untuk mengatur bolBroadcastRegistred variabel PALSU ketika menjalankan unregisterReceive()
Sukses!
Jika anda menempatkan ini pada onDestroy atau onStop metode. Saya berpikir bahwa ketika aktivitas yang telah dibuat lagi MessageReciver itu't sedang dibuat.
Aku digunakan Niat untuk membiarkan Penerima Siaran tahu tentang Handler contoh dari Kegiatan utama thread dan menggunakan Pesan untuk menyampaikan pesan kepada kegiatan Utama
Saya telah menggunakan mekanisme tersebut untuk memeriksa jika Penerima Siaran sudah terdaftar atau tidak. Kadang-kadang hal ini diperlukan ketika anda mendaftarkan Penerima Siaran secara dinamis dan tidak ingin membuatnya dua kali atau anda hadir untuk pengguna jika Penerima Siaran berjalan.
Kegiatan utama:
Penerima Siaran:
Secara pribadi saya menggunakan metode panggilan unregisterReceiver dan menelan terkecuali jika itu's dilemparkan. Saya setuju ini jelek tapi metode terbaik saat ini.
I've mengangkat permintaan fitur untuk mendapatkan boolean metode untuk memeriksa jika penerima terdaftar ditambahkan ke API Android. Mohon dukungan itu di sini jika anda ingin melihat ditambahkan: https://code.google.com/p/android/issues/detail?id=73718
Saya mendapatkan masalah anda, saya menghadapi masalah yang sama dalam Aplikasi saya. Aku menelepon registerReceiver() beberapa waktu dalam aplikasi.
Sebuah solusi sederhana untuk masalah ini adalah untuk memanggil registerReceiver() dalam Aplikasi Kustom Kelas. Ini akan memastikan bahwa penerima Siaran akan dipanggil satu-satunya di seluruh siklus hidup Aplikasi.
Ini adalah bagaimana saya melakukannya, itu adalah versi modifikasi dari jawaban yang diberikan oleh ceph3us dan diedit oleh slinden77 (di antara hal-hal lain yang saya telah dihapus kembali nilai-nilai dari metode yang saya tidak perlu):
Kemudian pada suatu Kegiatan kelas:
saya menempatkan kode ini pada orang tua saya kegiatan
Daftar registeredReceivers = new ArrayList<>();
Anda dapat menggunakan Belati untuk membuat referensi dari penerima.
Pertama memberikan:
Maka inject ini di mana anda perlu (menggunakan
pembina
atau lapanganinjeksi
)dan hanya lulus untuk
registerReceiver
.Juga memasukkannya ke dalam
try/catch
block terlalu.Berikut ini's apa yang saya lakukan untuk memeriksa apakah Penyiar sudah terdaftar, bahkan jika anda menutup aplikasi (finish())
Oral menjalankan aplikasi anda, mengirim siaran pertama ini akan mengembalikan nilai true/false tergantung pada jika anda penyiar di masih berjalan atau tidak.
Saya Penyiar
Saya MainActivity
Hanya memeriksa NullPointerException. Jika penerima tidak ada, maka...