Intent: Unterschied zwischen den Versionen

Aus Android Wiki
Keine Bearbeitungszusammenfassung
(Corrected a grammar mistake)
 
(7 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Unvollständig}}
{{Unvollständig}}
Als '''Intent''' (deutsch: ''Vorhaben'', ''Intention'') wird in Android eine Art ''Broadcast''-Nachricht (vgl. englisch ''Messaging object''), 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 kann bspw. innerhalb einer App von einer Activity zur nächsten übergegangen werden. Hierbei wird zwischen '''expliziten '''und '''implizieten''' Intents unterschieden.
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:
* '''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<ref>{{Cite web | url = https://www.duden.de/rechtschreibung/explizit | title = Eintrag für das Wort "explizit" im Duden | accessdate = 2018-09-07 | publisher = duden.de}}</ref>) 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 <code>android.content.Intent</code> repräsentiert.<ref>{{Cite web | url = https://developer.android.com/reference/android/content/Intent | title = API-Dokumentation zur Klasse android.content.Intent | accessdate = 2018-09-07 | publisher = developer.android.com (Offizielle Entwickler-Dokumentation für Android)| language = en}}</ref>


== 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 das Starten einer neuen/anderen Activity.
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. Dies ist beispielsweise der Fall, wenn man in der eigenen App eine andere Activity aufrufen möchte.
 
Das folgende Quellcode-Beispiel für die Programmiersprache [[Java]] zeigt, wie ein expliziter Intent gestartet wird:
<pre>
Intent einExpliziterIntent = new Intent(this, HilfeActivity.class);
startActivity( einExpliziterIntent );
</pre>
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 <code>android.content.Context</code><ref>{{Cite web | url = https://developer.android.com/reference/android/content/Context#startActivity(android.content.Intent) | title = API-Dokumentation zur Methode ''startActivity(Intent)'' in der Klasse ''android.content.Context'' | accessdate = 2018-09-07 | publisher = developer.android.com (Offizielle Entwickler-Dokumentation für Android) | language = en}}</ref> definiert; diese Methode steht über Vererbung u.a. auch in der Klasse ''android.app.Activity'' zur Verfügung<ref>{{Cite web | url = https://developer.android.com/reference/android/app/Activity | title = API-Dokumentation zur Klasse android.app.Activity | accessdate = 2018-09-07 | publisher = developer.android.com (Offizielle Entwickler-Dokumentation für Android)| language = en}}</ref>, 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).


== Impliziete Intents ==
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.  
Im Gegensatz zu expliziten Intents, erfordern impliziete 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 implizieter 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).
 
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 ==
== Einzelnachweise ==
<references />
<references />
[[Kategorie:App Entwicklung]]

Aktuelle Version vom 1. Juli 2019, 13:01 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[Bearbeiten | Quelltext bearbeiten]

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. Dies ist beispielsweise der Fall, wenn man in der eigenen App eine andere Activity aufrufen möchte.

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[Bearbeiten | Quelltext bearbeiten]

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[Bearbeiten | Quelltext bearbeiten]

  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.