Android Broadcast Receivers

Broadcast mottakere
bare svare for å kringkaste meldinger fra andre programmer eller fra selve systemet. Disse meldingene gang kalt hendelser eller hensikter. For eksempel kan programmer også starte sendinger for å la andre programmer vet at noen data har blitt lastet ned til enheten og er tilgjengelig for dem å bruke, så dette blir kringkastet mottakeren som vil fange opp denne kommunikasjonen, og vil iverksette nødvendige tiltak.
< p> Det er følgende to viktige skritt for å gjøre BroadcastReceiver fungerer for systemkringkastet hensikter og minus;.

Opprette Broadcast Receiver

Registrering Broadcast Receiver

Det er ett av trinnene i tilfelle du kommer til å iverksette tilpassede hensikter så du blir nødt til å opprette og kringkaste de hensikter.

Opprette Broadcast Receiver
< p> En kringkastingsmottaker er implementert som en underklasse av BroadcastReceiver
klasse og overstyring av OnReceive () metode der hver melding er mottatt som en Intent
objekt parameter.
public class MyReceiver strekker BroadcastReceiver {Override public void OnReceive (Context kontekst, Intent hensikt) {Toast.makeText (kontekst, "Intent oppdaget.", Toast.LENGTH_LONG) .vis (); }}
Registrering Broadcast Receiver

En søknad lytter etter bestemte kringkastings hensikter ved å registrere en kringkastingsmottaker i AndroidManifest.xml
fil. . Anser vi skal registrere MyReceiver
for systemgenerert hendelsen ACTION_BOOT_COMPLETED som er avfyrt av systemet når Android-systemet har fullført oppstartsprosessen
Broadcast-mottaker
< søknad android: icon = "@ teikne /ic_launcher" android: label = "@ streng /APP_NAME" android: tema = "@ stil /AppTheme" > < mottaker android: name = "MyReceiver" > < intent-filter > < handling android: name = "android.intent.action.BOOT_COMPLETED" > < /action > < /intent-filter > < /mottaker > < /søknad >

Nå når Android-enheten blir startet, vil den bli mottatt av BroadcastReceiver MyReceiver Hotell og implementert logikk inne OnReceive ()
vil bli henrettet .

Det er flere systemgenerert hendelser definert som slutt statiske felt i Intent
klasse. Tabellen nedenfor viser noen viktige systemhendelser
. Hendelses ConstantDescriptionandroid.intent.action.BATTERY_CHANGEDSticky kringkastings inneholder ladetilstand, nivå, og annen informasjon om battery.android.intent.action.BATTERY_LOWIndicates lav batterispenning på enheten. android.intent.action.BATTERY_OKAYIndicates batteriet er nå i orden etter å ha blitt low.android.intent.action.BOOT_COMPLETEDThis sendes en gang, etter at systemet er ferdig booting.android.intent.action.BUG_REPORTShow aktivitet for rapportering en bug.android.intent .action.CALLPerform en samtale med noen som er spesifisert av data.android.intent.action.CALL_BUTTONThe brukeren trykket på "call" -knappen for å gå til alarmsentralen eller andre passende UI for å plassere en call.android.intent.action.DATE_CHANGEDThe dato har changed.android.intent.action.REBOOT Har enheten omstart.
sending Tilpassede Intents

Hvis du vil at programmet selv skal generere og sende tilpassede hensikter så du blir nødt til å opprette og sende de hensikter ved å bruke sendBroadcast ()
metode inni aktivitet klasse. Hvis du bruker sendStickyBroadcast (Intent)
metoden, er den Intent klissete
, noe som betyr at Intent
du sender opphold rundt etter at sendingen er fullført. Anmeldelser public void broadcastIntent (Vis visning) {Intent hensikt = new Intent (); intent.setAction ("com.tutorialspoint.CUSTOM_INTENT"); sendBroadcast (hensikt);}

Denne intensjonen com.tutorialspoint.CUSTOM_INTENT
kan også registreres på lignende måte som vi har regsitered system generert hensikt
< søknad android. icon = "@ teikne /ic_launcher "android: label =" @ streng /APP_NAME "android: tema =" @ stil /AppTheme "> < mottaker android: name = "MyReceiver" > < intent-filter > < handling android: name = "com.tutorialspoint.CUSTOM_INTENT" > < /action > < /intent-filter > < /mottaker > < /søknad >
Eksempel

Dette eksempelet vil forklare deg hvordan du lager BroadcastReceiver
å avskjære tilpasset hensikt. Når du er kjent med tilpassede hensikt, så kan du programmere din søknad for å avskjære systemgenerert hensikter. Så la oss følge følgende trinn for å endre Android applikasjon vi opprettet i Hello World Eksempel
kapittel −
StepDescription1You vil bruke Android studio for å lage en Android-applikasjon og navn det som Min Application
under en pakke com.example.My Søknad
som forklart i Hello World Eksempel
chapter.2Modify hovedaktivitet fil MainActivity.java
å legge broadcastIntent ()
method.3Create en ny java fil som heter MyReceiver.java
under pakken com.example.My Søknad
å definere en BroadcastReceiver.4An program kan håndtere en eller flere egen og system hensikter uten noen restriksjoner. Hver innrykk du ønsker å avskjære må være registrert i AndroidManifest.xml
fil ved hjelp av < mottaker ... /> tag 5Modify innholdet i res /layout /activity_main.xml
filen standard for å inkludere en knapp for å kringkaste intent.6No må endre strengen filen, Android studio ta vare på string.xml file.7Run søknaden til lansere Android emulator og kontrollere resultatet av de endringer som er gjort i programmet.

Følgende er innholdet i den modifiserte hovedaktivitet filen src /com.example.My Søknad /MainActivity.java
. Denne filen kan inneholde hver av de grunnleggende livsløps metoder. Vi har lagt til broadcastIntent ()
metode for å kringkaste en tilpasset hensikt
pakken com.example.My Application;. Import android.os.Bundle, import android.app.Activity; import android.view.Menu; import android.content.Intent, import android.view.View; public class MainActivity strekker Aktivitet {Override public void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); }Override Public boolean onCreateOptionsMenu (Meny menyen) {getMenuInflater () blåse (R.menu.activity_main, meny).; return true; } //Kringkaste en tilpasset hensikt. public void broadcastIntent (Vis visning) {Intent hensikt = new Intent (); intent.setAction ("com.tutorialspoint.CUSTOM_INTENT"); sendBroadcast (hensikt); }}

Følgende er innholdet av src /com.example.My Søknad /MyReceiver.java Bilde:
pakke com.example.My Application, import android.content.BroadcastReceiver; import android. content.Context, import android.content.Intent, import android.widget.Toast; public class MyReceiver strekker BroadcastReceiver {Override public void OnReceive (Context kontekst, Intent hensikt) {Toast.makeText (kontekst, "Intent oppdaget.", Toast .LENGTH_LONG) .vis (); }}

Følgende vil den endrede innholdet i AndroidManifest.xml
fil. Her har vi lagt til < tjeneste ... /> tag å inkludere vår tjeneste:
< manifest xmlns: android = "http://schemas.android.com/apk/res/android" pakken = "com.example.My Application" android: version = "1" android: versjon = "1.0" > < bruker-SDK android: minSdkVersion = "8" android: targetSdkVersion = "22" /> < søknad android: icon = "@ teikne /ic_launcher" android: label = "@ streng /APP_NAME" android: tema = "@ stil /AppTheme" > < aktivitet android: ". MainActivity" name = android: label = "@ streng /title_activity_main" > < intent-filter > < handling android: name = "android.intent.action.MAIN" /> < kategori android: name = "android.intent.category.LAUNCHER" /> < /intent-filter > < /aktivitets > < mottaker android: name = "MyReceiver" > < intent-filter > < handling android: name = "com.tutorialspoint.CUSTOM_INTENT" > < /action > < /intent-filter > < /mottaker > < /søknad > < /manifest >

Etter vil være innholdet i res /layout /activity_main.xml
fil for å inkludere en knapp for å kringkaste vår custom hensikt −
< RelativeLayout xmlns: android = "http://schemas.android.com/apk/res/android~~number=plural" xmlns: verktøy = "http://schemas.android.com/tools" android: layout_width = "match_parent" android: layout_height = " match_parent "android: paddingLeft =" @ dimen /activity_horizontal_margin "android: paddingRight =" @ dimen /activity_horizontal_margin "android: paddingTop =" @ dimen /activity_vertical_margin "android: paddingBottom =" @ dimen /activity_vertical_margin "verktøy: kontekst =". MainActivity " > < TextView android: id = "+ id /textView1" android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: text = "Eksempel på Broadcast" android: layout_alignParentTop = "true" android: layout_centerHorizontal = "true "android: Tekststørrelse =" 30dp "/> < TextView android: id = "+ id /textView2" android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: text = "Tutorials point" android: textcolor = "# ff87ff09" android: Tekststørrelse = "30dp "android: layout_above =" + id /imageButton "android: layout_centerHorizontal =" true "android: layout_marginBottom =" 40dp "/> < ImageButton android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: id = "+ id /imageButton" android: src = "@ teikne /abc" android: layout_centerVertical = "true" android: layout_centerHorizontal = " true "/> < Button android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: id = "+ id /knappen2" android: text = "Broadcast Intent" android: onclick = "broadcastIntent" android: layout_below = "+ id /imageButton "android: layout_centerHorizontal =" true "/> < /RelativeLayout >

Etter vil være innholdet i res /verdier /strings.xml
å definere to nye konstanter og minus;
< resources > < string name = "menu_settings" > Innstillinger < /string > < string name = "title_activity_main" > My Application < /string > < /ressurser >

La oss prøve å kjøre vår modifiserte Hello World
søknaden vi bare endret!. Jeg antar at du hadde laget ditt AVD
mens du gjør miljøet oppsett. For å kjøre programmet fra Android studio, åpne en av prosjektets aktivitets filer, og klikk Kjør ikonet fra verktøylinjen. Android Studio installerer programmet på AVD og starter den, og om alt er bra med set-up og anvendelse, vil det vise følgende Emulator vindu −

Nå kringkaste vår skikk hensikt, la oss klikk på Broadcast Intent
knappen, vil dette kringkaste vår custom hensikt "com.tutorialspoint.CUSTOM_INTENT"
som vil bli mottatt av våre registrerte BroadcastReceiver dvs. MyReceiver og som per vår implementert logikk en toast vil vises på bunnen av simulatoren som følger −

Du kan prøve å implementere andre BroadcastReceiver å avskjære system generert hensikter som system oppstart, dato endret, lavt batteri osv Anmeldelser