Mai mult
Cum pentru a verifica dacă Receptorul este înregistrat în Android?
Am nevoie pentru a verifica dacă înregistrați receptorul este încă înregistrat, dacă nu cum pot verifica orice metode?
235
17
Nu există nici o funcție API pentru a verifica dacă un receptor este înregistrat. Soluție este de a pune codul în
încerce bloc catch cum face de mai jos.
Nu sunt sigur API oferă în mod direct un API, dacă luăm în considerare acest thread]1:
mai simplă soluție
în receptor:
în cod:
ad 1
-- "mai litorala mod" adăugat metodă în receptor să se înregistreze și să setați pavilion
@amin - vezi durată de viață de la cod (nu sistem înregistrată de către manifesta intrare) a înregistrat receptor :)
Eu sunt, folosind această soluție
Aveți mai multe opțiuni
Puteți pune un steag în clasa ta sau de activitate. Pune o variabilă booleană în clasa ta si uita-te la acest steag să știu dacă aveți un Receptor înregistrat.
A crea o clasă care extinde Receptor și nu puteți folosi:
Singleton model pentru doar o instanță a acestei clase în proiectul dumneavoastră.
Pună în aplicare metode de a ști dacă Receptorul este registru.
Trebuie să utilizați try/catch:
O poti face usor....
Doar că, și acum, tu nu va primi mai mult mesaj de eroare de excepție pe onPause().
Tip1: folosiți Întotdeauna unregisterReceiver() în onPause() nu în onDestroy() Tip2: Nu uitați să setați bolBroadcastRegistred variabilă FALSE atunci când executați unregisterReceive()
Succes!
Dacă ai pus asta pe onDestroy sau onStop metodă. Cred că atunci când activitatea a fost creat din nou MessageReciver fost't creat.
Am folosit Intenția de a lăsa Receptor de Difuzare știu despre Handler exemplu de Activitate principala de fir și de Mesaj folosit pentru a trece un mesaj Principal de activitate
Eu am folosit un astfel de mecanism pentru a verifica dacă Difuzare Receptorul este deja înregistrat sau nu. Uneori este necesar atunci când vă înregistrați Receptor de Difuzare dinamic și nu vreau să-l facă de două ori sau de a prezenta utilizatorului în cazul Receptor de Difuzare se execută.
Activitate principala:
Receptor De Difuzare:
Eu personal folosesc metoda de asteptare unregisterReceiver și înghițire excepția daca's de aruncat. Sunt de acord acest lucru este urât, dar cea mai bună metodă prevăzută în prezent.
Am'am ridicat-o cerere caracteristică pentru a obține un boolean metodă de a verifica dacă un receptor este înregistrat adăugat la API-ul Android. Vă rugăm să sprijine aici dacă doriți să vedeți adăugat: https://code.google.com/p/android/issues/detail?id=73718
Am înțeles problema ta, m-am confruntat cu aceeași problemă în Cererea mea. Am fost sunat registerReceiver() timp multiple în cadrul aplicației.
O soluție simplă la această problemă este de a apela registerReceiver() în Aplicație Personalizată Clasă. Acest lucru va asigura că dvs. de receptor de Difuzare va fi numit singurul din întreaga Aplicarea ciclului de viață.
Acest lucru este cum am făcut-o, este o versiune modificată a răspuns dat de ceph3us și editat de slinden77 (printre alte lucruri am scos returna valori de metode de care nu am nevoie):
Apoi, într-o Activitate clasa:
am pus acest cod în activitatea părinte
Listă registeredReceivers = new ArrayList<>();
Puteți utiliza Pumnalul pentru a crea o referință de acest receptor.
Prima oferi:
Apoi injectați în cazul în care aveți nevoie (folosind
constructorul
sau câmpul de injecție`)și pur și simplu trece la
registerReceiver
.De asemenea, pune-l în
try/catch
bloc prea.Aici's ceea ce am făcut pentru a verifica dacă Radiodifuzorul este deja înregistrată, chiar dacă închideți aplicația (sosire())
Firstime rulează aplicația, trimite un broadcast primul se va returna true/false depinde dacă radiodifuzorul în continuare de funcționare sau nu.
Meu De Radiodifuziune
Mi MainActivity
Doar verifica NullPointerException. Dacă receptorul nu există, atunci...