Absichten sind ein grundlegendes Thema für Android-Entwickler. Es ist unmöglich, Android-Anwendungen zu entwickeln, ohne mit Absichten in Berührung zu kommen. In diesem Tutorial werde ich Ihnen die Absichten von A bis Z beibringen.
Bei einem Fußballspiel geben die Mannschaftskameraden den Ball um das Spielfeld mit dem Ziel, ihn in das Tor des Gegners zu schicken. Der Ball wird vom Torwart der Mannschaft an die Verteidiger übergeben. Als nächstes kommt es zu den Mittelfeldspielern, und wenn alles wie geplant klappt, schickt einer der Stürmer es in das Netz des Gegners. Es wird davon ausgegangen, dass der Torhüter der Gegenseite ihn nicht fernhalten konnte!
In Android wird das Senden von Nachrichten durch das ermöglicht Absicht
Objekt. Mit Hilfe von Absichten können Android-Komponenten Funktionalität von anderen Android-Komponenten anfordern. Wenn Sie die Instagram-App auf Ihrem Telefon öffnen und mit ihr ein Foto aufnehmen, haben Sie eine Absicht ausgenutzt. Absichten helfen auch bei der Kommunikation zwischen Teilen einer App; Die Bewegung von einem Bildschirm (Aktivität) zu einem anderen wird durch Absichten ermöglicht.
Betrachten Sie es so: Alle Komponenten (Anwendungen und Bildschirme) des Android-Geräts sind isoliert. Die einzige Art und Weise, wie sie miteinander kommunizieren, ist durch Absichten.
Wie bereits erwähnt, können Sie mit Intents verschiedene Komponenten starten: Aktivitäten, Dienste und Rundfunkempfänger.
Um eine Aktivität zu starten, verwenden Sie die Methode startActivity
(Absicht)
.
Hier ist ein Code-Snippet, der zeigt, wie eine andere Aktivität aus einer Absicht heraus gestartet wird.
Intent numbersIntent = new Intent (MainActivity.this, NumbersActivity.class); startActivity (numbersIntent);
Zuerst erstellen wir ein neues Absicht
Objekt und übergeben Sie das ZahlenAktivität
Klasse. Dann starten wir eine neue Aktivität mit dieser Absicht.
Android unterstützt zwei Arten von Absichten: explizit und implizit. Wenn eine Anwendung ihre Zielkomponente in einer Absicht definiert, handelt es sich um eine explizite Absicht. Wenn die Anwendung keine Zielkomponente benennt, handelt es sich um eine implizite Absicht.
Der Code-Snippet von Code oben ist ein Beispiel für explizite Absichten. Schau es dir nochmal an.
Intent numbersIntent = new Intent (MainActivity.this, NumbersActivity.class); startActivity (numbersIntent);
Hier, ZahlenAktivität
ist die Zielkomponente von unserer Hauptaktivität
. Das bedeutet, dass ZahlenAktivität
ist die definierte Komponente, die vom Android-System aufgerufen wird. Es ist wichtig zu beachten (wie im obigen Beispiel), dass explizite Absichten normalerweise in einer Anwendung verwendet werden, da dies dem Entwickler die beste Kontrolle darüber gibt, welche Klasse gestartet wird.
Hier ist eine implizite Absicht:
Vorsatz = neuer Vorsatz (Intent.ACTION_VIEW, Uri.parse ("http://www.tutsplus.com")); startActivity (Absicht);
Wenn Sie den oben genannten Code in Ihrer Codebase haben, kann Ihre Anwendung über eine Absicht eine Browserkomponente für eine bestimmte URL starten. Aber wie erkennt das Android-System die Komponenten, die auf eine bestimmte Absicht reagieren können??
Eine Komponente kann über ein registriert werden Vorsatzfilter für eine bestimmte Aktion. Absichtsfilter können für Komponenten statisch im registriert werden AndroidManifest.xml. Hier ein Beispiel, bei dem eine Komponente als Web Viewer registriert wird:
Lassen Sie uns etwas Code schreiben, um zu sehen, wie es funktioniert. In diesem Abschnitt erstellen Sie eine kleine App, um beide Absichtsrichtungen auszuprobieren. Die App hat ein kleines Formular, um einen Vornamen und einen Nachnamen einzugeben. Wenn der einreichen Wenn Sie auf die Schaltfläche klicken, werden beide eingegebenen Werte an eine andere Aktivität übergeben. Es gibt auch eine Schaltfläche zum Starten eines Browsers Ihrer Wahl. Der gewählte Browser wird http://code.tutsplus.com geöffnet.
Öffnen Sie Android Studio und generieren Sie Ihr Hauptaktivität
. Sie können den Namen des Pakets auf einstellen com.tutsplus.code.android.droidintent.
Ihre Hauptaktivität
beginnt mit einigen Importen und der Klassendeklaration:
Paket com.tutsplus.code.android.droidintent; import android.content.Intent; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; Import android.view.View; import android.widget.Button; import android.widget.EditText; öffentliche Klasse MainActivity erweitert AppCompatActivity
Dann überschreiben Sie die onCreate ()
Methode zum Initialisieren der Aktivität mit einem beliebigen gespeicherten Status und dem Aktivitätslayout (wir erstellen dies später).
@Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); // Button-Handler gehen hier
Als Nächstes erhalten Sie Verweise auf jede der im Layout definierten Schaltflächen und hängen einen Klick-Listener an.
final Button submitButton = (Button) findViewById (R.id.submit_button); submitButton.setOnClickListener (neuer 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) ; String firstNameString = firstName.getText (). ToString (); String lastNameString = lastName.getText (). ToString (); Intents submitIntent = neuer Intent (MainActivity.this, ShowActivity.class); submitIntent.putExtra ("firstNameString", firstNameString); submitIntent.putExtra ("lastNameString", lastNameString); startActivity (submitIntent););
Für die einreichen Taste, stellen Sie ein OnClickListener
um eine Aktion auszulösen, wenn auf die Schaltfläche geklickt wird. Wenn ein Klick erfolgt, schnappen wir uns den Vor- und Nachnamen aus der Ansicht und senden sie an die nächste Aktivität: ShowActivity
. Die Zielkomponente ist explizit in der Absicht definiert, sodass dies ein Beispiel für eine explizite Absicht ist.
final Button browserButton = (Button) findViewById (R.id.browser_button); browserButton.setOnClickListener (neuer View.OnClickListener () @Override public void onClick (Ansicht v) Intent Intent = New Intent (Intent.ACTION_VIEW, Uri.parse ("https://code.tutsplus.com")); startActivity (Absicht););
Für die Browser-Schaltfläche die OnClickListener
erstellt eine neue Absicht, um jede Anwendung zu starten, die dem Filter entspricht: ACTION_VIEW
die eine Web-URL behandeln sollte. Mit anderen Worten, es wird ein Webbrowser gestartet. Wenn auf Ihrem Gerät mehr als eine Browseranwendung installiert ist, werden Sie aufgefordert, eine zu wählen, um die Website zu öffnen. Dies ist ein Beispiel für eine implizite Absicht.
Hauptaktivität
LayoutDas Layout für Hauptaktivität
wird in diesem Tutorial sehr einfach sein.
Hier hast du zwei Textvorschau
und zwei Text bearbeiten
jeweils Vorname und Nachname. Es gibt auch eine Schaltfläche zum Übertragen der Namen und eine weitere zum Starten Ihres Browsers.
ShowActivity
Um unsere App abzuschließen, müssen Sie eine Aktivität erstellen, um die oben definierte explizite Absicht zu handhaben. Erstellen Sie eine neue Aktivität mit dem Namen ShowActivity
. In dieser Aktivität wird das Ergebnis der Eingabe des Vornamens und Nachnamens angezeigt. So sollte es aussehen:
Paket com.tutsplus.code.android.droidintent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; public class ShowActivity erweitert AppCompatActivity @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_show); Bündel 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);
In dieser Aktivität beginnen Sie damit, dass die Zeichenfolgen vom übergeben werden Hauptaktivität
. Mit dem können Sie einen Verweis auf die Absicht erhalten, die den Start dieser Aktivität ausgelöst hat getIntent ()
Funktion. Dann können Sie auf die übergebenen Zeichenfolgen zugreifen getExtras (). getString ()
. Nachdem Sie die TextView-Instanzen aus dem Layout abgerufen haben, zeigen Sie schließlich die erhaltenen Werte an.
Das Layout für diese Aktivität ist einfach:
Jetzt können Sie Ihre App erstellen und auf Ihrem Android-Gerät ausprobieren!
Sie können Bundles auch verwenden, wenn Sie Daten über Absichten weiterleiten.
Das Bündeln
Diese Klasse ermöglicht das Speichern komplexer Daten und unterstützt Datentypen wie Zeichenfolgen, Zeichen, Boolean, Integer usw. Hier ist ein Beispiel wie Teil von MainActivity.java würde schauen, wenn du benutzt hast Bündeln
.
// Bundle-Objekt erstellen Bundle b = new Bundle (); // Speichern von Daten im Bundle b.putString ("firstNameString", firstNameString); b.putString ("lastNameString", lastNameString); // Intent-Objekt erstellen Intent submitIntent = new Intent (MainActivity.this, ShowActivity.class); // Bündelobjekt in Absicht speichern submitIntent.putExtra (b); startActivity (submitIntent);
In diesem Lernprogramm haben wir eine kurze Einführung in die Verwendung von Absichten zum Erstellen von Aktivitäten in Android erhalten. Wir haben uns den Unterschied zwischen expliziten und impliziten Intentionen angesehen und ein einfaches Beispiel für jeden Typ geschrieben.
Weitere Informationen zu den Absichten finden Sie in der Android-Dokumentation. Zu verstehen, wie sie funktionieren, ist sehr wichtig. Wenn Sie mehr Apps erstellen, werden Sie auf viele verschiedene Arten von Intents und deren Verwendung stoßen.
In der Zwischenzeit können Sie einige unserer anderen Beiträge zur Entwicklung von Android-Apps lesen!