- Direkter Aufruf einer Activitiy
- Parameter-Daten als Extra verpackt
- Fernaufruf einer Activity anhand einer ACTION
- Intent-Filter
Ein Intent wird für den Start einer Activity oder eines Services verwendet. Dabei enthält es Informationen über den gewünschten Adressaten und die Daten, die vom Empfänger verarbeitet werden sollen. Folgende Informationen kann die Intent enthalten:
- Absende-Activity
- die Ziel-Activity-Class
- Die gewünschte Aktivittät
- Eine URI mit den Daten
- Parameter-Daten als Extra verpackt
Direkter Aufruf einer Activitiy
Der Parameter von startActivity() ist ein Intent, dessen Konstruktor zwei Parameter bekommt.- Der erste Parameter ist die Ausgangs-Activity - also typischerweise this.
- Der zweite Parameter ist die Klasse der Ziel-Activity.
Intent intent = new Intent(this, AufgerufeneActivity.class); startActivity(intent);Durch den Aufruf von startActivity() wird die Ziel-Activity des übergebenen Intents gestartet.
Datenübergabe bei Activity-Wechsel
Häufig müssen an die aufgerufene Activity Daten übermittelt werden. Diese werden als Extra im Intent abgelegt. Um ein Extra zu einem Intent hinzuzufügen wird der Aufruf putExtra über das Intent aufgerufen.
Das Extra als Datenbestandteil des Intents
Ein Extra ist einer Java-Properties oder einer String-Map vergleichbar. Der erste Parameter ist ein String, der als Schlüssel dient, im zweiten Parameter werden die Daten abgelegt, die über den Key erreichbar sind.
Intent intent = new Intent(this, AufgerufeneActivity.class); // Intent mit den Daten füllen intent.putExtra("key1", "Irgendwelcher Text"); intent.putExtra("key2", "Nochson Text"); startActivity(intent);Die mit putExtra gesendeten Daten werden können mit der Methode getStringExtra aus dem empfangenen Intent herausgelesen werden. Dabei wird der erste Parameter als Schlüssel verwendet.
... public void onCreate(Bundle bundle) { ... Intent intent = getIntent(); String data = intent.getStringExtra("key1"); String andere = intent.getStringExtra("key2"); ... }
Datentypen für Extras
Die Methode putExtra ist so überladen, dass als zweiter Parameter verschiedene Datentypen übergeben werden können. Bisher wurden nur String-Paare verwendet. Aber es können auch Zahlen oder Objekte übergeben werden.Beim Lesen des Extras muss allerdings angegeben werden, welcher Datentyp erwartet wird. So liefert getStringExtra wie gesehen einen String. getIntExtra liefert einen int und so weiter.
Um eigene Objekte zu übertragen, müssen diese Parcelable implementieren. Dann wird mit den Methoden putExtra("key", object) geschrieben und mit getParcelableExtra("key") zurückgeholt.
Fernaufruf einer Activity anhand einer ACTION
Es kann aber auch ein Intent gebildet werden, der als ersten Parameter eine ACTION erhält und als zweiten Parameter eine URI, die angibt, auf welchen Daten die Aktion ausgeführt werden soll. Wird diese Intent als Parameter an startActivity übergeben, sucht Android eine Activity, die sich um diese ACTION kümmert und übergibt dieser Activity die URI mit den Argumenten der ACTION:
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:112")); startActivity(intent);Es wird vermutlich die Standard-Dialer-App aufgerufen, die dann die Telefonnummer 112 aufrufen will.
ACTION-Konstanten
Android definiert in der Klasse Intent Aktions-Bezeichner als Konstanten. Diese Aktionen werden auf der als URI übergebenen Daten oder Dateien von der gestarteten Activity ausgeübt:- Intent.ACTION_DELETE: Lösche URI
- Intent.ACTION_EDIT: Bearbeite URI
- Intent.ACTION_INSERT: Füge neues Element in den Cursor ein.
- Intent.ACTION_PICK: Wähle aus dem Content-Provider, der als URI übergeben wird ein Element aus.
- Intent.ACTION_SEARCH: Der Suchbegriff steht in den Extras unter dem Schlüssel SearchManager.QUERY.
- Intent.ACTION_WEB_SEARCH: Sucht per Browser nach dem Suchbegriff in den Extras unter dem Schlüssel SearchManager.QUERY.
- Intent.ACTION_SEND:
- Intent.ACTION_SEND_TO: Sendet an den Kontakt, der durch die URI festgelegt wird.
- Intent.ACTION_VIEW: Stelle die URI dar.
- Intent.ACTION_DIAL: Öffne die Dialer-App mit der als URI übergebenen Telefonnummer.
Aufruf einer Webseite
Das folgende Beispiel ruft den intern vorangemeldeten Browser auf, um eine der wertvollsten Webseiten dieser Welt aufzurufen:Intent intent = new Intent( Intent.ACTION_VIEW, Uri.parse("http://www.willemer.de/informatik") ); startActivity(intent);
Auf Ziel-Activity prüfen
Vor dem Fernaufruf wäre es recht interessant zu erfahren, ob es überhaupt eine Acitivity gibt, die die ACTION übernimmt.
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:112")); PackageManager packageManager = getPackageManager(); ComponentName component = intent.resolveActivity(packageManager); if (component != null) { startActivity(intent); } else { // oha, kein Ziel! }
Intent-Filter
Will eine Activity auf ACTION-Intents reagieren, erstellt sie einen Intent-Filter. Ein Intent-Filter wird in der Datei AndroidManifest.xml der Anwendung dem jeweiligen Activity-Knoten durch das Tag intent-filter hinzugefügt.<activity android:name="MeineActivity"> <intent-filter> <action ... <category ... <data ... </intent-filter> </activity>Dieses Tag hat weitere Attribute, die angeben, auf welche Intents die Activity reagiert:
- action: Das Attribut android:name gibt an, welche ACTION ausgeführt wird. Dieser Eintrag ist erforderlich. Der ACTION-Name kann selbstdefiniert werden, muss aber eindeutig sein.
- category: Das Attribut android:name gibt die Kategorie der Aktion an.
- <category android:name="android.intent.category.DEFAULT"/>
- <category android:name="android.intent.category.BROWSABLE" />
- <category android:name="android.intent.category.ALTERNATIVE"/>
- <category android:name="android.intent.category.SELECTED_ALTERNATIVE" />
- data: Beschreibt die Daten des Intent-Filters, insbesondere
- android:host: Gibt den Rechnernamen im Netzwerk an.
- android:port: Gibt den Port an.
- android:scheme: Gibt das Schema (http:, tel:, content:, ...) an.
- android:path: Gibt den Pfad an.
- android:mimetype: Bezeichnet den Datentyp.
- Dazu ruft sie die Methode getIntent auf.
- Über die Referenz auf das Intent kann Sie die Methode getData aufrufen, um an die Daten des Intents zu gelangen.
- getStringExtra, getIntExtra holen die Extras.
- Mit getAction kann die ACTION bestimmt werden, für die die Activity aufgerufen wurde.