Intent är ett grundläggande ämne för Android-utvecklare. Det är omöjligt att bygga Android-applikationer utan att komma i kontakt med intentioner. I denna handledning lär jag dig om intentioner från A till Z.
I en fotbollsmatch passerar lagkamrater bollen runt fältet i syfte att skicka in den till motståndarens mål. Bollen går från lagets målvakt till sina försvarare. Därefter finner den sin väg till mittfältare, och om sakerna fungerar som planerat skickar en av strejkarna in mot motståndarens nät. Det antas att målvakten på andra sidan inte kunde hålla bort den!
I Android är möjligheten att skicka meddelanden runt möjlig av Avsikt
objekt. Med hjälp av avsikter kan Android-komponenter begära funktionalitet från andra Android-komponenter. När du öppnar Instagram-appen på din telefon och använder den för att ta en bild, använde du bara en avsikt. Intents hjälper också kommunicera mellan delar av en app; Förflyttningen från en skärm (aktivitet) till en annan är möjlig med avsikt.
Titta på det här sättet: Alla komponenter (applikationer och skärmar) på Android-enheten är isolerade. Det enda sättet de kommunicerar med varandra är genom avsikt.
Som tidigare nämnts kan du använda avsikter att starta olika komponenter: aktiviteter, tjänster och sändare.
För att starta en aktivitet kommer du att använda metoden startActivity
(avsikt)
.
Här är en kodbit som visar hur man startar en annan aktivitet från en avsikt.
Intent numbersIntent = new Intent (MainActivity.this, NumbersActivity.class); startActivity (numbersIntent);
Först skapar vi en ny Avsikt
objekt och skicka det till NumbersActivity
klass. Då börjar vi en ny aktivitet med den avsikt.
Android stöder två typer av intent: explicit och implicit. När en applikation definierar sin målkomponent i en avsikt, är det en uttrycklig avsikt. När programmet inte heter en målkomponent är det en implicit avsikt.
Koden i koden ovan är ett exempel på uttrycklig avsikt. Titta på det igen.
Intent numbersIntent = new Intent (MainActivity.this, NumbersActivity.class); startActivity (numbersIntent);
Här, NumbersActivity
är målkomponenten från vår Huvudaktivitet
. Detta innebär att NumbersActivity
är den definierade komponenten som kommer att kallas av Android-systemet. Det är viktigt att notera (som i exemplet ovan) att de uttryckliga intentionen vanligen används inom en applikation, eftersom det ger utvecklaren den mest kontroll över vilken klass som ska lanseras.
Här är en implicit avsikt:
Intent Intent = Ny Intent (Intent.ACTION_VIEW, Uri.parse ("http://www.tutsplus.com")); startActivity (intent);
Om du har ovanstående kod i din kodbas kan din applikation starta en webbläsarkomponent för en viss URL via en avsikt. Men hur identifierar Android-systemet de komponenter som kan reagera på en viss avsikt?
En komponent kan registreras via en avsikt filter för en specifik åtgärd. Intentfilter kan registreras för komponenter statiskt i AndroidManifest.xml. Här är ett exempel som registrerar en komponent som webbvisare:
Låt oss skriva en kod för att se hur det fungerar. I det här avsnittet ska du bygga en liten app för att prova båda avsikterna. Appen kommer att ha en liten form för att ange ett förnamn och efternamn. När Lämna knappen klickas, båda de inmatade värdena kommer att överföras till en annan aktivitet. Det kommer också att finnas en knapp för att starta en webbläsare efter eget val. Den valda webbläsaren öppnar http://code.tutsplus.com.
Öppna Android Studio och skapa din Huvudaktivitet
. Du kan ange paketets namn till com.tutsplus.code.android.droidintent.
Din Huvudaktivitet
kommer att börja med en del import och klassdeklarationen:
paketet com.tutsplus.code.android.droidintent; importera android.content.Intent; importera android.net.Uri; importera android.support.v7.app.AppCompatActivity; importera android.os.Bundle; importera android.view.View; importera android.widget.Button; importera android.widget.EditText; public class MainActivity utökar AppCompatActivity
Då åsidosätter du onCreate ()
metod för att initiera aktiviteten med något sparat tillstånd och aktivitetslayouten (vi skapar det här senare).
@Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); // knapphanterare gå här
Därefter får du referenser till var och en av knapparna som definieras i layouten och bifogar en klicklarmare till var och en av dem.
sista knappen submitButton = (Button) findViewById (R.id.submit_button); submitButton.setOnClickListener (new View.OnClickListener () @Override public void onClick (Visa 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););
För Lämna knappen, du ställer in en OnClickListener
för att utlösa en åtgärd när knappen klickas. När ett klick inträffar tar vi först och efternamn från vyn och skickar dem till nästa aktivitet: ShowActivity
. Målkomponenten är uttryckligen definierad i avsikt, vilket gör detta till exempel en uttrycklig avsikt.
Final Button BrowserButton = (Button) findViewById (R.id.browser_button); browserButton.setOnClickListener (new View.OnClickListener () @Override public void onClick (Visa v) Intent intention = new Intent (Intent.ACTION_VIEW, Uri.parse ("https://code.tutsplus.com")); startActivity (avsikt););
För webbläsarknappen, OnClickListener
kommer att skapa en ny avsikt att starta en applikation som matchar filtret: an ACTION_VIEW
som ska hantera en webbadress. Med andra ord startar den en webbläsare. Om du har mer än ett webbläsarprogram installerat på din enhet blir du ombedd att välja en för att utföra åtgärden att öppna webbplatsen. Detta är ett exempel på en implicit avsikt.
Huvudaktivitet
LayoutLayouten för Huvudaktivitet
kommer att vara väldigt enkelt för syftet med denna handledning.
Här har du två Textview
och två Redigera text
med angivande av förnamn och efternamn. Det finns också en knapp för att skicka in namnen, och en annan för att starta din webbläsare.
ShowActivity
För att slutföra vår app måste vi skapa en aktivitet för att hantera den uttryckliga avsikt som definieras ovan. Skapa en ny aktivitet som heter ShowActivity
. Det här är den aktivitet där resultatet av att ange förnamn och efternamn visas. Här är hur det ska se ut:
paketet com.tutsplus.code.android.droidintent; importera android.support.v7.app.AppCompatActivity; importera android.os.Bundle; importera android.widget.TextView; public class ShowActivity utökar 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 denna aktivitet börjar du genom att få strängarna passerade från Huvudaktivitet
. Du kan få en hänvisning till den avsikt som utlöste lanseringen av denna aktivitet med getIntent ()
fungera. Då kan du komma åt strängarna som skickades till den med getExtras (). getString ()
. Slutligen, efter att du har fått TextView-instanserna från layouten, visar du de värden du fått.
Layouten för denna aktivitet är enkel:
Nu kan du bygga din app och prova den på din Android-enhet!
Du kan också använda Bundles när du skickar data via avsikt.
De Bunt
klassen kan du lagra komplexa data och stödja datatyper som strängar, tecken, booleska, heltal och så vidare. Här är ett exempel på hur en del av MainActivity.java skulle se om du använde Bunt
.
// Skapa Bundle Object Bundle b = Ny Bundle (); // Spara data i bunt b.putString ("firstNameString", firstNameString); b.putString ("lastNameString", lastNameString); // Skapa Intent-objekt Intent submitIntent = New Intent (MainActivity.this, ShowActivity.class); // Lagra buntobjekt i avsikt submitIntent.putExtra (b); startActivity (submitIntent);
I den här handledningen fick vi en kort introduktion till användandet av avsikt att skapa aktiviteter i Android. Vi tittade på skillnaden mellan explicit och implicit intent, och kodade ett enkelt exempel som använde varje typ.
Du kan läsa mer om intentioner i Android-dokumentationen. Att förstå hur de fungerar är mycket viktigt. När du bygger fler appar kommer du att stöta på många olika typer av Intents och sätt att använda dem.
Och under tiden, kolla in några av våra andra inlägg i Android App-utveckling!