Intenties zijn een fundamenteel onderwerp voor Android-ontwikkelaars. Het is onmogelijk om Android-applicaties te bouwen zonder in contact te komen met intenties. In deze zelfstudie leer ik je van A tot Z over de intenties.
In een voetbalwedstrijd geven teamgenoten de bal het veld rond met als doel het naar het doel van hun tegenstander te sturen. De bal wordt doorgegeven van de keeper van het team naar hun verdedigers. Vervolgens vindt het zijn weg naar de middenvelders en als de zaken volgens plan verlopen, stuurt een van de aanvallers het naar het net van de tegenstander. Dat veronderstelt dat de keeper van de andere kant het niet kon weghouden!
In Android is de mogelijkheid om berichten te verzenden mogelijk gemaakt door de voornemen
voorwerp. Met behulp van intenties kunnen Android-componenten functionaliteit aanvragen van andere Android-componenten. Wanneer je de Instagram-app opent op je telefoon en deze gebruikt om een foto te maken, heb je zojuist een intentie gebruikt. Intenties helpen ook om te communiceren tussen delen van een app; de beweging van het ene scherm (activiteit) naar het andere wordt mogelijk gemaakt door intenties.
Bekijk het op deze manier: alle componenten (applicaties en schermen) van het Android-apparaat zijn geïsoleerd. De enige manier waarop ze met elkaar communiceren, is door middel van intenties.
Zoals eerder vermeld, kunt u intenties gebruiken om verschillende componenten te starten: activiteiten, services en broadcast-ontvangers.
Om een activiteit te starten, maakt u gebruik van de methode startActivity
(Intent)
.
Hier is een codefragment dat laat zien hoe een andere activiteit vanuit een intentie kan worden gestart.
Intent numbersIntent = new Intent (MainActivity.this, NumbersActivity.class); startActivity (numbersIntent);
Eerst maken we een nieuwe voornemen
object en geef het door NumbersActivity
klasse. Dan beginnen we een nieuwe activiteit met die intentie.
Android ondersteunt twee soorten intenties: expliciet en impliciet. Wanneer een toepassing de doelcomponent in een opzet definieert, is dit een expliciete bedoeling. Wanneer de toepassing een doelcomponent niet een naam geeft, is dit een impliciete bedoeling.
Het codefragment van bovenstaande code is een voorbeeld van expliciete intentie. Bekijk het nog een keer.
Intent numbersIntent = new Intent (MainActivity.this, NumbersActivity.class); startActivity (numbersIntent);
Hier, NumbersActivity
is de doelcomponent van onze Hoofdactiviteit
. Dit betekent dat NumbersActivity
is het gedefinieerde onderdeel dat door het Android-systeem wordt gebeld. Het is belangrijk op te merken (zoals in het bovenstaande voorbeeld), dat expliciete intenties meestal worden gebruikt binnen een applicatie, omdat dat de ontwikkelaar de meeste controle geeft over welke klasse wordt gelanceerd.
Hier is een impliciete bedoeling:
Intent intent = new Intent (Intent.ACTION_VIEW, Uri.parse ("http://www.tutsplus.com")); startActivity (intent);
Als u de bovenstaande code in uw codebase heeft, kan uw toepassing via een intentie een browsercomponent voor een bepaalde URL starten. Maar hoe identificeert het Android-systeem de componenten die op een bepaalde intentie kunnen reageren?
Een component kan worden geregistreerd via een intentie filter voor een specifieke actie. Opzettelijke filters kunnen statisch worden geregistreerd voor componenten in de AndroidManifest.xml. Hier is een voorbeeld dat een component registreert als een webviewer:
Laten we wat code schrijven om te kijken hoe het werkt. In deze sectie bouw je een kleine app om beide intentie stijlen uit te proberen. De app heeft een klein formulier om een voor- en achternaam in te voeren. Wanneer de voorleggen knop wordt geklikt, worden beide ingevoerde waarden doorgegeven aan een andere activiteit. Er zal ook een knop zijn om een browser naar keuze te starten. De gekozen browser opent http://code.tutsplus.com.
Open Android Studio en genereer uw Hoofdactiviteit
. U kunt de naam van het pakket instellen op com.tutsplus.code.android.droidintent.
Jouw Hoofdactiviteit
zal beginnen met wat invoer en de klassenverklaring:
pakket com.tutsplus.code.android.droidintent; importeer android.content.Intent; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; importeer android.widget.Button; importeer android.widget.EditText; openbare klasse MainActivity breidt AppCompatActivity uit
Dan overschrijf je de onCreate ()
methode om de activiteit te initialiseren met elke opgeslagen status en de lay-out van de activiteit (we zullen dit later maken).
@Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); // knopafhandelaars gaan hier
Vervolgens krijg je verwijzingen naar elk van de knoppen die in de lay-out zijn gedefinieerd en voeg je een klik luisteraar toe aan elk van hen.
final Button submitButton = (Button) findViewById (R.id.submit_button); submitButton.setOnClickListener (nieuwe View.OnClickListener () @Override public void onClick (View v) EditText firstName = (EditText) findViewById (R.id.first_name_text); EditText lastName = (EditText) findViewById (R.id.last_name_text) ; String firstNameString = firstName.getText (). ToString (); String lastNameString = lastName.getText (). ToString (); Intent submitIntent = new Intent (MainActivity.this, ShowActivity.class); submitIntent.putExtra ("firstNameString", firstNameString); submitIntent.putExtra ("lastNameString", lastNameString); startActivity (submitIntent););
Voor de voorleggen knop, stelt u een OnClickListener
om een actie te activeren wanneer op de knop wordt geklikt. Wanneer er een klik plaatsvindt, nemen we de voor- en achternaam uit de weergave en sturen we ze naar de volgende activiteit: ShowActivity
. De doelcomponent is expliciet gedefinieerd in de intentie, waardoor dit een voorbeeld van expliciete intentie is.
laatste Knop browserButton = (Knop) findViewById (R.id.browser_button); browserButton.setOnClickListener (nieuwe View.OnClickListener () @Override public void onClick (View v) Intent intent = new Intent (Intent.ACTION_VIEW, Uri.parse ("https://code.tutsplus.com")); startActivity (opzet););
Voor de browserknop, de OnClickListener
maakt een nieuwe intentie om elke toepassing te starten die overeenkomt met het filter: ACTION_VIEW
die een web-URL moet afhandelen. Met andere woorden, het start een webbrowser. Als u meer dan één browsertoepassing op uw apparaat hebt geïnstalleerd, wordt u gevraagd er een te selecteren om de actie voor het openen van de website uit te voeren. Dit is een voorbeeld van een impliciete intentie.
Hoofdactiviteit
lay-outDe lay-out voor Hoofdactiviteit
zal heel eenvoudig zijn voor het doel van deze tutorial.
Hier heb je er twee Tekstweergave
en twee Tekst bewerken
met vermelding van respectievelijk voornaam en achternaam. Er is ook een knop om de namen in te dienen en een andere om je browser te starten.
ShowActivity
Om onze app te voltooien, moeten we een activiteit maken om de hierboven gedefinieerde expliciete intentie te behandelen. Maak een nieuwe activiteit genaamd ShowActivity
. Dit is de activiteit waarbij het resultaat van het invoeren van de voor- en achternaam wordt getoond. Hier is hoe het eruit zou moeten zien:
pakket com.tutsplus.code.android.droidintent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; public class ShowActivity breidt AppCompatActivity uit @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_show); Bundel extra's = 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);
In deze activiteit begin je door de tekenreeksen door te geven van de Hoofdactiviteit
. U kunt een verwijzing krijgen naar de intentie die de start van deze activiteit heeft geactiveerd met de getIntent ()
functie. Vervolgens hebt u toegang tot de strings die zijn doorgegeven met behulp van getExtras (). getString ()
. Nadat u de instanties van TextView uit de lay-out hebt opgehaald, geeft u ten slotte de waarden weer die u hebt verkregen.
De lay-out voor deze activiteit is eenvoudig:
Nu kunt u uw app bouwen en uitproberen op uw Android-apparaat!
U kunt ook gebruikmaken van bundels bij het doorgeven van gegevens via intenties.
De Bundel
Met class kunt u complexe gegevens opslaan en datatypes ondersteunen, zoals strings, chars, boolean, integer enzovoort. Hier is een voorbeeld van hoe een deel van MainActivity.java zou kijken als je het gebruikte Bundel
.
// Bundelobjectbundel maken b = nieuwe bundel (); // Gegevens opslaan in bundel b.putString ("firstNameString", firstNameString); b.putString ("lastNameString", lastNameString); // Creating Intent object Intent submitIntent = new Intent (MainActivity.this, ShowActivity.class); // Bundelobject opslaan in intentie submitIntent.putExtra (b); startActivity (submitIntent);
In deze zelfstudie hebben we een korte inleiding gegeven over het gebruik van intenties om activiteiten in Android te maken. We keken naar het verschil tussen expliciete en impliciete intenties en codeerden een eenvoudig voorbeeld dat elk type gebruikte.
U kunt meer lezen over intenties in de Android-documentatie. Begrijpen hoe ze werken is erg belangrijk. Naarmate je meer apps bouwt, zul je veel verschillende soorten intenties tegenkomen en manieren om ze te gebruiken.
En bekijk in de tussentijd een aantal van onze andere berichten over de ontwikkeling van Android-apps!