En Android-koders introduksjon til kringkastingsmottakere

Da jeg var liten bodde vi ute i pinnene, og vår telefontjeneste var det som var kjent som en festlinje. Jeg mistenker at noen av dere som leser denne bloggen ikke har noen anelse om hva en festlinje er, så både for å utdanne meg og date meg, la meg raskt forklare. En festlinje var en telefonlinje som du delte med en eller flere av naboene dine.

I vårt tilfelle delte vi en telefonlinje med fru Stump, den eldre kvinnen som eide en eplehage over gaten. Da du ønsket å ringe, hentet du mottakeren, men før du ringte (på en skikkelig ærlig mot godhet roterende urskive), måtte du først lytte og se om fru Stump allerede var på telefonen. Hvis hun var det, var den høflige tingen å henge på. (Fru Stump virket eldgamelt for meg den gangen, men hun hadde veldig skarp hørsel, og jeg kan forsikre deg om du ikke gjorde det høflige senere den dagen Mrs. Stump skulle snakke med moren din.)

Hva har noe av dette å gjøre med Android-utvikling? Vel, Android-operativsystemet har en intern mekanisme kalt en kringkasting / mottaker-modell som fungerer litt som de gamle festtelefonlinjene. Operativsystemet og til og med andre applikasjoner kringkaster periodisk meldinger om ting som skjer, for eksempel batteristatus endret, Wi-Fi ble slått på eller telefonens retning endret. Dette er alle ting som blir kunngjort i sanntid, og hvis du vet hvordan du tar opp telefonen og lytter, kan koden din reagere deretter uten at det blir unødvendig avstemning for staten som interesserer deg.

Du kan lese Googles offisielle forklaring på en BroadcastReceiver. Hvis du liker meg, selv om du foretrekker en kodeprøve, har jeg laget en kort demonstrasjon av hvordan jeg oppretter, registrerer og bruker en kringkastingsmottaker for å lytte til enhetsorientering. Du kan følge med på opplæringen, eller laste ned hele prosjektet og importere det til arbeidsområdet ditt direkte.

1. Lag et nytt Android-prosjekt i Eclipse. Målrett SDK for Android 1.6 eller nyere. Sørg for å endre oppstartsfilen til Main.java.

2. I mappen / res / layout vil vi definere layout for Main.java-filen. Åpne main.xml og legg til et par tekstvisninger.

 main.xml 
 "1.0" encoding = "utf-8" ?> 

http://schemas.android.com/apk/res/android

android: layout_width = "fill_parent"

android: layout_height = "fill_parent"

android: orientering = "vertikal" >

android: layout_width = "fill_parent"

android: layout_height = "wrap_content"

android: textColor = "# 00ff00"

android: textSize = "20dip"

android: text = "Broadcast Receiver Demo" />

android: layout_width = "fill_parent"

android: layout_height = "wrap_content"

android: text = "(roter telefonen for å aktivere mottaker)" />

3. La oss ta en titt på Main.java-filen i / src-mappen vår. Til å begynne med, ønsker vi å erklære en ny kringkastingsmottaker. Jeg har gjort dette inline, men hvis du ikke foretrekker Java's inline syntax, kan du alltid utvide BroadcastReceiver med din egen tilpassede klasse.

 Main.java- pakke com.authorwjf.broadcast_receiver; 
 import android.app.Aktivitet; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.res.Configuration; import android.os.Bundle; import android.widget.Toast; 
 offentlig klasse Hoved utvider aktivitet { 
 privat BroadcastReceiver the_receiver = new BroadcastReceiver () { 
 @Override public void onReceive (Kontekst c, Intens i) { int orientering = getBaseContext (). GetResources (). GetConfiguration (). Orientering; if (retning == Konfigurasjon. ORIENTATION_PORTRAIT ) { 

Skål. makeText (getBaseContext (), "Jeg står fortsatt.", Toast. LENGTH_SHORT ) .show ();

} annet hvis (orientering == Konfigurasjon. ORIENTATION_LANDSCAPE ) {

Skål. makeText (getBaseContext (), "Hjelp! Jeg har falt, og jeg kan ikke reise meg.", Toast. LENGTH_SHORT ) .show ();

} annet {

Skål. makeText (getBaseContext (), "?! # $% !?", toast. LENGTH_SHORT ) .show ();

}

}

};
 privat IntentFilter-filter = nytt IntentFilter (Intent. ACTION_CONFIGURATION_CHANGED ); 
 } 

4. Når mottakeren er definert og et par handlinger på plass for å håndtere en mottak, er det som gjenstår å håndtere registreringen og avregistreringen av mottakeren. Det er mulig å registrere kringkastingsmottakeren i Android-manifestet for aktiviteten; kan du finne et eksempel på å gjøre dette på Googles offisielle dokumentasjonsside. Jeg foretrekker å registrere sendingsmottakerne mine i kode, i stor grad fordi det gir meg muligheten til dynamisk å koble til og koble dem fra når jeg velger.

 Main.java 

@Overstyring

public void onCreate (Bundle savedInstanceState) { super .onCreate (savedInstanceState);

setContentView (R.layout. main );

}
 @Override beskyttet tomrom onResume () { denne .registerReceiver (the_receiver, filter); super .onResume (); } 
 @Override beskyttet tomrom onPause () { denne .unregisterReceiver (the_receiver); super .onPause (); } 

5. Åpne manifestet og aktiver deteksjon av orienteringsendring ved å legge til følgende alternativ i aktiviteten:

 android: configChanges = "orientering" 

Det gjør det. Legg koden til enheten eller emulatoren, og roter deretter telefonen (Ctrl F12 på emulatoren). Når sendingen er mottatt, viser mottakeren en passende toastmelding ( figur A ).

Figur A

Se, det er Android-versjonen av en festlinje. Jeg synes sendemottakere er enkle og ekstremt nyttige. Bare husk å "henge på" når du er ferdig med å lytte ved å avregistrere mottakersamtalen; Ellers kan Google sende noen over for å chatte med moren din!

© Copyright 2021 | pepebotifarra.com