Intent: Unterschied zwischen den Versionen

Aus Android Wiki
K (vollqualifizierte Klassen-Namen im laufenden Text in <code></code> gesetzt)
(Corrected spelling and grammar mistakes)
Zeile 1: Zeile 1:
{{Unvollständig}}
{{Unvollständig}}
Ein '''Intent''' (deutsch: ''Vorhaben'', ''Intention'') ist in der [[Android]]-Programmierung eine asynchrone Nachricht, welche verwendet werden kann, um Aktionen von anderen App-Komponenten zu beziehen<ref>{{Cite web|url = http://developer.android.com/guide/components/intents-filters.html|title = <nowiki>Intents and Intent Filters | Android Developers</nowiki>|accessdate = 2015-01-24}}</ref><ref>{{Cite web|url = https://de.wikibooks.org/wiki/Googles_Android/_Intents_oder_%22Ich_h%C3%A4tte_gern_den_Zucker%22#Actions_und_Intent-Filter|title = Googles Android/ Intents oder "Ich hätte gern den Zucker" – Wikibooks, Sammlung freier Lehr-, Sach- und Fachbücher|accessdate = 2015-01-24}}</ref>, bzw. andere App-Komponenten über Ereignisse zu informieren. Über Intents wird bspw. innerhalb einer App von einer [[Activity]] zu einer anderen Activity "springen".  
Ein '''Intent''' (deutsch: ''Vorhaben'', ''Intention'') ist in der [[Android]]-Programmierung eine asynchrone Nachricht, welche verwendet werden kann, um Aktionen von anderen App-Komponenten zu beziehen<ref>{{Cite web|url = http://developer.android.com/guide/components/intents-filters.html|title = <nowiki>Intents and Intent Filters | Android Developers</nowiki>|accessdate = 2015-01-24}}</ref><ref>{{Cite web|url = https://de.wikibooks.org/wiki/Googles_Android/_Intents_oder_%22Ich_h%C3%A4tte_gern_den_Zucker%22#Actions_und_Intent-Filter|title = Googles Android/ Intents oder "Ich hätte gern den Zucker" – Wikibooks, Sammlung freier Lehr-, Sach- und Fachbücher|accessdate = 2015-01-24}}</ref>, bzw. andere App-Komponenten über Ereignisse zu informieren. Über Intents wird bspw. innerhalb einer App von einer [[Activity]] zu einer anderen Activity "gesprungen".  


Es können grundsätzlich zwei Arten von Intents unterschieden werden:
Es können grundsätzlich zwei Arten von Intents unterschieden werden:
Zeile 9: Zeile 9:


== Explizite Intents ==
== Explizite Intents ==
Ein expliziter Intent erfordert, dass die zu startende Aktivität (bzw. der Klassenname) bekannt und angegeben wird. Typischerweise wird dieser Typ eines Intents dann verwendet, wenn der Name einer zu startenden Klasse bekannt ist, also bspw. innerhalb der eigenen App eine andere Activity zu Anzeige zu bringen.
Ein expliziter Intent erfordert, dass die zu startende Aktivität (bzw. der Klassenname) bekannt ist und angegeben wird. Typischerweise wird dieser Typ eines Intents dann verwendet, wenn der Name einer zu startenden Klasse bekannt ist, also bspw. innerhalb der eigenen App eine andere Activity zu Anzeige zu bringen.


Das folgende Quellcode-Beispiel für die Programmiersprache [[Java]] zeigt, wie ein expliziter Intent gestartet wird:
Das folgende Quellcode-Beispiel für die Programmiersprache [[Java]] zeigt, wie ein expliziter Intent gestartet wird:

Version vom 1. Juli 2019, 11:55 Uhr

In diesem Artikel oder Abschnitt fehlen wichtige Informationen. Hilf DroidWiki, sichte die Diskussion und recherchiere in deinen Quellen zu dem Thema Intent und füge die Informationen ein, aber bitte kopiere keine urheberrechtlich geschützten Inhalt in diesen Artikel.

Die Hauptautoren wurden noch nicht informiert. Bitte benachrichtige sie!

Ein Intent (deutsch: Vorhaben, Intention) ist in der Android-Programmierung eine asynchrone Nachricht, welche verwendet werden kann, um Aktionen von anderen App-Komponenten zu beziehen[1][2], bzw. andere App-Komponenten über Ereignisse zu informieren. Über Intents wird bspw. innerhalb einer App von einer Activity zu einer anderen Activity "gesprungen".

Es können grundsätzlich zwei Arten von Intents unterschieden werden:

  • Explizite Intents dienen dazu, innerhalb derselben App zu einer anderen Activity zu springen. Hierbei muss der Klassen-Name dieser Activity angegeben werden. Das "Sprungziel" wird also explizit (ausdrücklich[3]) definiert.
  • Implizite Intents dienen dazu, eine Activity in einer anderen App zu öffnen, die eine bestimmte Aktion auf bestimmten Daten ausführen kann (z.B. Aktion "Anzeige" für Daten vom Typ "URL"). Es steht zum Zeitpunkt der Prorammierung also nicht fest, welche App oder Klasse den Intent verarbeiten wird; es kann auch vorkommen, dass auf einem Android-Gerät es keine App gibt, die den Intent verarbeiten kann (dann wird die aufrufende App vom System beendet).

Bei der Programmierung wird ein Intent durch ein Objekt der Klasse android.content.Intent repräsentiert.[4]

Explizite Intents

Ein expliziter Intent erfordert, dass die zu startende Aktivität (bzw. der Klassenname) bekannt ist und angegeben wird. Typischerweise wird dieser Typ eines Intents dann verwendet, wenn der Name einer zu startenden Klasse bekannt ist, also bspw. innerhalb der eigenen App eine andere Activity zu Anzeige zu bringen.

Das folgende Quellcode-Beispiel für die Programmiersprache Java zeigt, wie ein expliziter Intent gestartet wird:

Intent einExpliziterIntent = new Intent(this, HilfeActivity.class);
startActivity( einExpliziterIntent );

In der ersten Zeile wird ein neues Objekt der Klasse Intent aus dem Paket android.content erzeugt. Als zweites Argument wird hierbei eine bestimmte Activity über den Klassen-Namen spezifiziert (das erste Argument ist hier eine Selbst-Referenz auf das aufrufende Objekt, z.B. eine andere Activity). Die in der zweiten Zeile aufgerufene Methode startActivity(Intent) ist in der Klasse android.content.Context[5] definiert; diese Methode steht über Vererbung u.a. auch in der Klasse android.app.Activity zur Verfügung[6], so dass aus einer Activity zu einer anderen Activity "gesprungen" werden kann.

Implizite Intents

Im Gegensatz zu expliziten Intents, erfordern implizite Intents keinen Klassennamen, die zu startende Aktivität (Activity, Service, o.Ä.) muss also beim Erstellen des Intents nicht bekannt sein. Stattdessen wird ein allgemeiner Name einer auszuführenden Aktion verwendet, welche wiederum von anderen App-Komponenten (entweder der eigenen oder einer externen, anderen App) gehandhabt werden kann. Ein impliziter Intent wird meist dann verwendet, wenn davon ausgegangen werden kann, dass eine bestimmte Aktion potentiell auch von anderen Activities ausgeführt werden könnten (bspw. das Öffnen eines Weblinks, weil praktisch auf jedem Android-Gerät eine Web-Browser-App vorhanden ist).

Wenn eine App einen impliziten Intent abschickt, der von keiner einzigen App auf dem Gerät verarbeitet werden kann (z.B. Intent zum Anwählen einer Telefon-Nummer auf einem Tablet, das über kein Mobilfunk-Modul verfügt), dann wird die App vom System beendet (sie "stürzt" ab). Eine App sollte deshalb vor dem Versenden eines impliziten Intents zur Laufzeit überprüfen, ob es auf dem Gerät mindestens eine App gibt, die den Intent verarbeiten kann.

Wenn es auf einem Gerät zwei oder mehr Apps gibt, die einen impliziten Intent verarbeiten können (z.B. wenn mehrere Web-Browser installiert sind), dann fragt das System den Nutzer mit einem Dialog, mit welcher dieser Apps der Intent verarbeitet werden soll. Der Nutzer kann hierbei angeben, ob das System sich diese Auswahl merken soll, so dass bei nächsten Auftreten dieses Intents ohne Rückfrage beim Nutzer der Intent an die ausgewählte App weitergeleitet wird.

Einzelnachweise

  1. Interner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127.
  2. Interner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127.
  3. Interner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127.
  4. Interner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127.
  5. Interner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127.
  6. Interner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127.