Hva er Android Intents?

Intens er et grunnleggende tema for Android-utviklere. Det er umulig å bygge Android-applikasjoner uten å komme i kontakt med hensikter. I denne opplæringen lærer jeg deg om hensikt fra A til Å.

Hva er hensikt?

I en fotballkamp passerer lagkameratene ballen rundt feltet med sikte på å sende det inn i motstandernes mål. Ballen ble sendt fra lagets målvakt til sine forsvarere. Deretter finner den veien til midtbanespillerne, og hvis tingene går som planlagt, sender en av streikmennene seg inn i motstandernes net. Det antas at målvakten på den andre siden ikke kunne holde den unna!

I Android er muligheten til å sende meldinger rundt muliggjort av Intent gjenstand. Med hjelp av hensikt kan Android-komponenter be om funksjonalitet fra andre Android-komponenter. Når du åpner Instagram-appen på telefonen din og bruker den til å ta et bilde, har du bare brukt en hensikt. Intents hjelper også å kommunisere mellom deler av en app; bevegelsen fra en skjerm (aktivitet) til en annen er muliggjort av hensikt.

Se på det på denne måten: Alle komponenter (applikasjoner og skjermer) på Android-enheten er isolert. Den eneste måten de kommuniserer med hverandre er gjennom hensikt.

Starte aktiviteter med intensjoner

Som nevnt tidligere kan du bruke hensikt å starte forskjellige komponenter: aktiviteter, tjenester og kringkasting mottakere.

For å starte en aktivitet, vil du benytte metoden startActivity(Hensikt).

Her er en kodebrikke som viser hvordan du starter en annen aktivitet fra en hensikt.

 Intent numbersIntent = new Intent (MainActivity.this, NumbersActivity.class); startActivity (numbersIntent);

Først oppretter vi en ny Intent objekt og send det til NumbersActivity klasse. Da starter vi en ny aktivitet med den hensikt.

Typer av hensikt

Android støtter to typer hensikter: eksplisitt og implisitt. Når et program definerer sin målkomponent i en hensikt, er det en eksplisitt hensikt. Når programmet ikke heter en målkomponent, er det en implisitt hensikt.

Eksplisitt eksempel

Kodestykket av kode over er et eksempel på eksplisitt intensjon. Ta en titt på det igjen.

 Intent numbersIntent = new Intent (MainActivity.this, NumbersActivity.class); startActivity (numbersIntent);

Her, NumbersActivity er målkomponenten fra vår Hoved aktivitet. Dette betyr at NumbersActivity er den definerte komponenten som vil bli kalt av Android-systemet. Det er viktig å merke seg (som i eksemplet ovenfor) at de eksplisitte hensiktene vanligvis brukes innenfor et program, fordi det gir utvikleren mest kontroll over hvilken klasse som skal lanseres.

Implisitt Intent Eksempel

Her er en implisitt hensikt:

 Intent Intent = Ny Intent (Intent.ACTION_VIEW, Uri.parse ("http://www.tutsplus.com")); startActivity (hensikt);

Hvis du har den ovennevnte koden i kodebasen din, kan programmet starte en nettleserkomponent for en bestemt nettadresse via en hensikt. Men hvordan identifiserer Android-systemet komponentene som kan reagere på en bestemt hensikt?

En komponent kan registreres via en intensjonsfilter for en bestemt handling. Intent filtre kan registreres for komponenter statisk i AndroidManifest.xml. Her er et eksempel som registrerer en komponent som nettleser:

      

Bruke hensikt i en app

La oss skrive noen kode for å se hvordan det virker. I denne delen skal du bygge en liten app for å prøve ut begge typer intensjoner. Appen vil ha et lite skjema for å skrive inn et fornavn og etternavn. Når Sende inn knappen er klikket, begge verdiene blir sendt til en annen aktivitet. Det vil også være en knapp for å starte en nettleser av ditt valg. Den valgte nettleseren åpner http://code.tutsplus.com.

Åpne Android Studio og generer din Hoved aktivitet. Du kan angi pakkenes navn til com.tutsplus.code.android.droidintent.

Din Hoved aktivitet vil begynne med litt import og klassen erklæring:

pakke com.tutsplus.code.android.droidintent; importer android.content.Intent; importer android.net.Uri; importer android.support.v7.app.AppCompatActivity; importere android.os.Bundle; importer android.view.View; importer android.widget.Button; importer android.widget.EditText; offentlig klasse MainActivity utvider AppCompatActivity 

Da vil du overstyre onCreate () metode for å initialisere aktiviteten med en lagret tilstand og aktivitetsoppsettet (vi lager dette senere).

 @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); // knapphåndterere gå her

Deretter får du referanser til hver av knappene som er definert i oppsettet, og legger til en klikklytter til hver av dem.

 siste knapp sendButton = (Button) findViewById (R.id.submit_button); submitButton.setOnClickListener (new View.OnClickListener () @Override public void onClick (Vis v) EditText firstName = (EditText) findViewById (R.id.first_name_text); EditText lastName = (EditText) findViewById (R.id.last_name_text) String firstNameString = firstName.getText () .String (); String lastNameString = lastName.getText () .String (); Intent submitIntent = new Intent (MainActivity.this, ShowActivity.class); submitIntent.putExtra ("firstNameString" firstNameString); submitIntent.putExtra ("lastNameString", lastNameString); startActivity (submitIntent);); 

For Sende inn knappen, du setter en OnClickListener å utløse en handling når knappen klikkes. Når et klikk oppstår, tar vi for- og etternavnet fra visningen, og sender dem til neste aktivitet: ShowActivity. Målkomponenten er eksplisitt definert i hensikt, noe som gjør dette til et eksempel på eksplisitt intensjon.

 siste knappleserButton = (Button) findViewById (R.id.browser_button); browserButton.setOnClickListener (new View.OnClickListener () @Override public void onClick (Vis v) Intent intention = new Intent (Intent.ACTION_VIEW, Uri.parse ("https://code.tutsplus.com")); startActivity (hensikt);); 

For nettleserknappen, OnClickListener vil skape en ny hensikt å starte et program som samsvarer med filteret: an ACTION_VIEW som skal håndtere en webadresse. Med andre ord lanserer den en nettleser. Hvis du har mer enn ett nettleserprogram installert på enheten din, blir du bedt om å velge en for å utføre handlingen med å åpne nettstedet. Dette er et eksempel på en implisitt hensikt.

Hoved aktivitet Oppsett

Oppsettet for Hoved aktivitet vil være veldig enkelt for formålet med denne opplæringen.

      

Her har du to TextView og to EditText med henholdsvis fornavn og etternavn. Det er også en knapp for å sende inn navnene, og en annen for å starte nettleseren din.

Opprett ShowActivity

For å fullføre vår app, må vi opprette en aktivitet for å håndtere den eksplisitte hensikten som er definert ovenfor. Opprett en ny aktivitet som heter ShowActivity. Dette er aktiviteten der resultatet av å skrive inn fornavnet og etternavnet blir vist. Her er hvordan det skal se ut:

pakke com.tutsplus.code.android.droidintent; importer android.support.v7.app.AppCompatActivity; importere android.os.Bundle; importer android.widget.TextView; offentlig klasse ShowActivity utvider AppCompatActivity @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_show); Bundle extras = getIntent (). GetExtras (); String inputFirstName = extras.getString ("firstNameString"); String inputLastName = extras.getString ("lastNameString"); TextView showFirstName = (TextView) findViewById (R.id.show_first_name); TextView showLastName = (TextView) findViewById (R.id.show_last_name); showFirstName.setText (inputFirstName); showLastName.setText (inputLastName); 

I denne aktiviteten begynner du ved å få strengene gått fra Hoved aktivitet. Du kan få en referanse til hensikten som utløste lanseringen av denne aktiviteten med getIntent () funksjon. Da kan du få tilgang til strengene som ble sendt til den ved hjelp av getExtras (). getString (). Etter at du har fått TextView-forekomstene fra oppsettet, viser du verdiene du oppnådde. 

ShowActivity Layout

Oppsettet for denne aktiviteten er enkelt:

      

Testing av appen

Nå kan du bygge appen din og prøve den ut på Android-enheten din!

Passerer data ved hjelp av pakker

Du kan også benytte Bundles når du sender data via hensikt.

De Bunt klassen lar deg lagre komplekse data og støtter datatyper som strenger, tegn, boolsk, heltall og så videre. Her er et eksempel på hvordan en del av MainActivity.java ville se om du brukte Bunt.

// Opprette Bundle Object Bundle b = Ny Bundle (); // Lagre data i bunt b.putString ("firstNameString", firstNameString); b.putString ("lastNameString", lastNameString); // Opprette hensikt objekt Intent submitIntent = new Intent (MainActivity.this, ShowActivity.class); // Lagre buntobjektet i hensikt sendIntent.putExtra (b); startActivity (submitIntent);

Konklusjon

I denne opplæringen fikk vi en kort introduksjon til bruk av hensikt å skape aktiviteter i Android. Vi så på forskjellen mellom eksplisitte og implisitte hensikter, og kodet et enkelt eksempel som brukte hver type. 

Du kan lese mer om hensikt i Android-dokumentasjonen. Å forstå hvordan de jobber er veldig viktig. Når du bygger flere programmer, møter du mange forskjellige typer Intent og måter å bruke dem på.

Og i mellomtiden, sjekk ut noen av våre andre innlegg på Android app utvikling!