În Android, există conceptul de mesaje difuzate care pot fi trimise sau recepționate. Ambele procese nu sunt conectate între ele și pot fi utilizate separat.
mesagerie
În primul rând, vom învăța cum să trimitem mesaje. Într-una din lecții am învățat cum să lansăm o altă activitate cu intenția de intenție. Dar intențiile pot fi folosite pentru a trimite mesaje care nu sunt destinate unei singure aplicații, obiecte sau componente, ci pentru toată lumea. Și orice program echipat cu un receptor special poate prinde acest mesaj și poate lua pași pe baza informațiilor primite.
Pentru înțelegere, imaginați-vă că operatorul de radio Kat trimite un mesaj: "Trimiteți urgent o pisică! Vreau să fiu o femeie puternică independentă și Stirlitz-ul tău este fascist!". Poate că acest mesaj conține o criptare pe care trebuie să o trimiteți o soție, o masă pentru soția unui cercetaș într-o cafenea ordonată și Stirlitz - o capră! Dar acest lucru nu este important pentru lecția noastră.
Oricine are un receptor radio special echipat poate primi acest mesaj. La fel și programele. Ei primesc receptoare și ascultă un anumit tip de mesaje.
Mesajele pot fi create de sistemul însuși, precum și de programul dvs. și de programele altor persoane.
Apoi, creați un obiect Intent. încărcați informațiile necesare în el și apelați metoda sendBroadcast (). parcurgându-l ca parametru obiectului Intent creat. Datele suplimentare pot fi folosite în extras ca parametri opționali.
Codul virtual pentru detectarea pisicilor:
În acest exemplu, am creat o intenție cu un șir unic, am transmis date suplimentare (numele pisicii și coordonatele acesteia) și am trimis un mesaj. O altă aplicație asociată hărților poate primi un mesaj și arăta pisica pe hartă.
Există, de asemenea, metode similare sendStickyBroadcast () și sendOrderedBroadcast ().
Pentru dispozitive mai vechi, acest lucru a fost destul, dar începând cu Android 3.0, din motive de securitate, mesajele vor fi ignorate de aplicațiile oprite, astfel încât acestea să nu pornească. Prin urmare, ar trebui să adăugați un steag suplimentar care să permită lansarea activității.
Vom scrie un exemplu simplu care va trimite mesaje și, de asemenea, va crea un receptor pentru a-l primi. Despre receptor, vom vorbi în detaliu în a doua parte a lecției. Între timp, primim prima idee despre asta.
Creați un nou proiect și plasați pe ecran un buton cu cuvintele "Trimiteți un mesaj". Atribuiți atributul onClick numele metodei în care va fi trimis mesajul difuzat.
În clasa de activitate, creați un șir unic și implementați metoda pentru a face clic pe buton. Adăugați, de asemenea, date suplimentare - prima parte a mesajului operatorului radio.
Prin executarea exemplului, puteți să faceți clic pe buton și să trimiteți un mesaj. Numai mesajul dvs. va merge nicăieri, deoarece nici o aplicație nu este echipată cu un receptor pentru el. Să rezolvăm situația și să creăm un receptor în aplicația dvs. Vom accepta propriile noastre mesaje.
Receptorul este o clasă Java obișnuită bazată pe BroadcastReceiver. Puteți crea o clasă manuală și o puteți umple cu metodele necesare. Anterior, și a făcut-o. Dar în studio există un șablon gata făcut pentru a economisi puțin timp.
Faceți clic dreapta pe numele pachetului și selectați Nou | Altele | Broadcast Receiver
În caseta de dialog, setați numele receptorului, lăsând setările rămase neschimbate.
Studioul va crea schimbări în două locuri. În primul rând, va fi creată clasa MessageReceiver:
În al doilea rând, un nou bloc va fi adăugat manifestului.
În el, trebuie să adăugați un filtru, prin care va prinde mesaje.
Să revenim la clasa receptor și să modificăm metoda onReceive ().
Din nou, executați exemplul și trimiteți din nou mesajul. Deoarece aplicația noastră este acum echipată nu numai cu transmițătorul, ci și cu receptorul, trebuie să prindem mesajul și să-l arătăm.
Puteți crea o altă aplicație cu un receptor, astfel încât o aplicație să trimită un mesaj, iar celălalt să accepte.
Receptoare de mesaje difuzate
Așa că ne-am mutat fără probleme la receptoarele mesajelor difuzate. De fapt, de multe ori nu trebuie să trimiteți mesaje, există o nevoie mult mai frecventă de a primi mesaje. În primul rând, mesaje din sistem. Exemple de astfel de mesaje includ:
- Baterie descărcată
- Apăsând butonul pentru cameră
- Instalarea unei noi aplicații
Receptorul poate fi creat în două moduri - prin manifeste (am folosit această metodă în exemplu) și programabil prin metoda registerReceiver (). Există o diferență semnificativă între cele două căi. Receptorul specificat în manifest este cunoscut de sistem care scanează fișierele manifestate ale tuturor aplicațiilor instalate. Prin urmare, chiar dacă aplicația dvs. nu este difuzată, va fi în continuare capabilă să răspundă la mesajul primit.
Receptorul, creat de software, poate funcționa numai atunci când activitatea aplicației este activă. Se părea că acest lucru este un dezavantaj și nu are sens să folosești această abordare. Dar nu este așa de simplu. Unele mesaje de sistem pot fi procesate numai de receptoare create de software. Și asta are un motiv propriu. De exemplu, dacă aplicația dvs. nu rulează, nu are sens să primiți mesaje despre încărcarea bateriei. În caz contrar, încărcarea acumulatorului va fi consumată și mai rapid, cu lucrări inutile inutile. Informații despre încărcarea bateriei aplicației dvs. pot fi primite, atunci când este necesar. Ar trebui verificat împreună cu documentația ce tip de receptor trebuie utilizat.
Când înregistrăm receptorul, ne putem înregistra și când nu mai avem nevoie de el folosind metoda unregisterBroadcastReceiver ().
Periodic declanșarea fiecărui minut
Să luăm în considerare un exemplu de funcționare periodică a receptorului în fiecare minut cu ajutorul intenției de sistem android.intent.action.TIME_TICK. Receptorul va fi creat programat. Adăugați două butoane în ecranul de activitate pentru înregistrarea și anularea înregistrării mesajului difuzat.
Creați manual o nouă clasă TimeBroadcastReceiver. moștenirea de la BroadcastReceiver:
Puteți crea o clasă a receptorului și prin șablon, așa cum am făcut în exemplul anterior. În acest caz, ștergeți intrarea în manifeste, deoarece nu avem nevoie de ea. Dar dacă uitați să faceți acest lucru, atunci nu se va întâmpla nimic teribil, deoarece nu există filtre înregistrate.
Vom deschide codul activității principale și vom înregistra (și vom înlătura și înregistrarea) receptorul:
Începem proiectul și dă clic pe primul buton pentru a permite difuzarea mesajului difuzat. Acum, fiecare minut va declanșa începerea unui mesaj pop-up cu ora curentă. Chiar dacă treceți la o altă aplicație, veți vedea în continuare mesaje.
Acesta este un exemplu în care receptorul trebuie înregistrat programabil. Am văzut adesea întrebările forumului despre motivul pentru care această intenție nu funcționează android.intent.action.TIME_TICK. Nu era necesar să-l înregistrăm în manifest.
În exemplul nostru, am instalat și ne-am înregistrat înregistrarea făcând clic pe butoane. De obicei includeți înregistrarea în metoda onResume (). dar nu se înregistrează în metoda onPause ().
Trebuie reținut faptul că înregistrarea programului mesajului difuzat este creată în firul principal al aplicației și aceasta poate fi o sursă de erori dacă operațiile BroadcastReceiver durează mult timp. Alternativ, utilizați serviciile. Citiți pe acest articol articolul (en).
Activitatea sau serviciul Autostart când dispozitivul se încarcă (repornește)
Un alt exemplu util care este adesea folosit de aplicații.
Dacă aplicația dvs. (serviciu) ar trebui lansată imediat după repornirea dispozitivului, utilizați intenția android.intent.action.BOOT_COMPLETED:
Am creat o clasă separată pentru mesajul difuzat. De asemenea, trebuie să creați o permisiune și să înregistrați receptorul în manifest.
Urmăm mâncarea
Nu, nu înseamnă să mănânci pisica corectă. Se referă la energia electrică provenită din electricitate. Dacă dispozitivul este deconectat de la încărcare, sistemul anunță despre acest eveniment prin intenția de difuzare android.intent.action.ACTION_POWER_DISCONNECTED.
Nu vom începe un nou receptor, ci deschideți manifestarea și adăugați un filtru suplimentar la receptorul de mesaje de la operatorul de radio Kat.
Și în clasa MessageReceiver vom adăuga codul metodei.
Un exemplu trebuie să fie verificat pe un dispozitiv real. Conectați dispozitivul la alimentare și apoi scoateți cablul. Pe ecran apare un mesaj.