Mit einem Intent können Sie eine Aktivität in einer anderen App starten, indem Sie in einem Intent
-Objekt eine Aktion beschreiben, die ausgeführt werden soll, z. B. „Karte ansehen“ oder „Foto aufnehmen“. Diese Art von Intent wird als impliziter Intent bezeichnet, da er nicht die zu startende App-Komponente, sondern eine Aktion angibt und einige Daten für die Ausführung der Aktion bereitstellt.
Wenn Sie startActivity()
oder startActivityForResult()
aufrufen und einen impliziten Intent übergeben, löst das System den Intent in eine App auf, die ihn verarbeiten kann, und startet die entsprechende Activity
. Wenn es mehr als eine App gibt, die den Intent verarbeiten kann, wird dem Nutzer ein Dialogfeld angezeigt, in dem er auswählen kann, welche App verwendet werden soll.
Auf dieser Seite werden verschiedene implizite Intents beschrieben, mit denen Sie häufige Aktionen ausführen können. Sie sind nach dem Typ der App geordnet, die den Intent verarbeitet. In jedem Abschnitt wird auch gezeigt, wie Sie einen Intent-Filter erstellen können, um zu bewerben, dass Ihre App die Aktion ausführen kann.
Achtung:Wenn auf dem Gerät keine Apps vorhanden sind, die einen impliziten Intent empfangen können, stürzt eine App ab, wenn sie startActivity()
aufruft. Um zuerst zu prüfen, ob eine App zum Empfangen des Intents vorhanden ist, rufen Sie resolveActivity()
für Ihr Intent
-Objekt auf. Wenn das Ergebnis nicht null ist, gibt es mindestens eine App, die den Intent verarbeiten kann, und es ist sicher, startActivity()
aufzurufen. Wenn das Ergebnis null ist, verwenden Sie die Intention nicht und deaktivieren Sie nach Möglichkeit die Funktion, mit der die Intention aufgerufen wird.
Wenn Sie nicht wissen, wie Intents oder Intent-Filter erstellt werden, lesen Sie zuerst Intents und Intent-Filter.
Informationen dazu, wie Sie die auf dieser Seite aufgeführten Intents von Ihrem Entwicklungshost aus auslösen, finden Sie im Abschnitt Intents mit der Android Debug Bridge überprüfen.
Google Voice Actions
Google Voice-Aktionen lösen einige der auf dieser Seite aufgeführten Intents als Reaktion auf Sprachbefehle aus. Weitere Informationen finden Sie unter Erste Schritte mit System-Sprachaktionen.
Wecker
Im Folgenden finden Sie häufige Aktionen für Wecker-Apps, einschließlich der Informationen, die Sie zum Erstellen eines Intent-Filters benötigen, um die Fähigkeit Ihrer App zu bewerben, die jeweilige Aktion auszuführen.
Wecker stellen
Wenn Sie einen neuen Wecker erstellen möchten, verwenden Sie die Aktion ACTION_SET_ALARM
und geben Sie mit den folgenden Extras Weckdetails wie Uhrzeit und Nachricht an.
Hinweis:Nur die Extras für Stunde, Minuten und Nachricht sind in Android 2.3 (API-Level 9) und niedriger verfügbar. Die anderen Extras sind in höheren Versionen der Plattform verfügbar.
- Aktion
ACTION_SET_ALARM
- Daten-URI
- Keine
- MIME-Typ
- Keine
- Extras
-
EXTRA_HOUR
- Die Stunde für den Wecker.
EXTRA_MINUTES
- Die Minuten für den Wecker.
EXTRA_MESSAGE
- Eine benutzerdefinierte Nachricht zur Identifizierung des Alarms.
EXTRA_DAYS
- Ein
ArrayList
mit jedem Wochentag, an dem dieser Alarm wiederholt wird. Jeder Tag muss mit einer Ganzzahl aus der KlasseCalendar
deklariert werden, z. B.MONDAY
.Bei einem einmaligen Wecker muss dieser Extra nicht angegeben werden.
EXTRA_RINGTONE
- Ein
content:
-URI, der einen Klingelton für den Wecker angibt, oderVALUE_RINGTONE_SILENT
für keinen Klingelton.Wenn Sie den Standardklingelton verwenden möchten, geben Sie dieses Extra nicht an.
EXTRA_VIBRATE
- Ein boolescher Wert, der angibt, ob bei diesem Wecker vibriert werden soll.
EXTRA_SKIP_UI
- Ein boolescher Wert, der angibt, ob die antwortende App ihre Benutzeroberfläche beim Stellen des Weckers überspringen muss. Bei „true“ muss die App die Bestätigungs-UI umgehen und den angegebenen Wecker stellen.
Beispiel für Intention:
Kotlin
fun createAlarm(message: String, hour: Int, minutes: Int) { val intent = Intent(AlarmClock.ACTION_SET_ALARM).apply { putExtra(AlarmClock.EXTRA_MESSAGE, message) putExtra(AlarmClock.EXTRA_HOUR, hour) putExtra(AlarmClock.EXTRA_MINUTES, minutes) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void createAlarm(String message, int hour, int minutes) { Intent intent = new Intent(AlarmClock.ACTION_SET_ALARM) .putExtra(AlarmClock.EXTRA_MESSAGE, message) .putExtra(AlarmClock.EXTRA_HOUR, hour) .putExtra(AlarmClock.EXTRA_MINUTES, minutes); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Zum Aufrufen des Intents ACTION_SET_ALARM
muss Ihre App die Berechtigung SET_ALARM
haben:
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
Beispiel für Intent-Filter:
<activity ...> <intent-filter> <action android:name="android.intent.action.SET_ALARM" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Timer erstellen
Verwende zum Erstellen eines Countdown-Timers die Aktion ACTION_SET_TIMER
und gib Timerdetails wie die Dauer mit den folgenden Extras an.
Hinweis:Diese Absicht ist ab Android 4.4 (API-Level 19) verfügbar.
- Aktion
ACTION_SET_TIMER
- Daten-URI
- Keine
- MIME-Typ
- Keine
- Extras
-
EXTRA_LENGTH
- Die Länge des Timers in Sekunden.
EXTRA_MESSAGE
- Eine benutzerdefinierte Nachricht zur Identifizierung des Timers.
EXTRA_SKIP_UI
- Ein boolescher Wert, der angibt, ob die antwortende App ihre Benutzeroberfläche beim Einstellen des Timers überspringen muss. Bei „true“ muss die App die Bestätigungs-UI umgehen und den angegebenen Timer starten.
Beispiel für Intention:
Kotlin
fun startTimer(message: String, seconds: Int) { val intent = Intent(AlarmClock.ACTION_SET_TIMER).apply { putExtra(AlarmClock.EXTRA_MESSAGE, message) putExtra(AlarmClock.EXTRA_LENGTH, seconds) putExtra(AlarmClock.EXTRA_SKIP_UI, true) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void startTimer(String message, int seconds) { Intent intent = new Intent(AlarmClock.ACTION_SET_TIMER) .putExtra(AlarmClock.EXTRA_MESSAGE, message) .putExtra(AlarmClock.EXTRA_LENGTH, seconds) .putExtra(AlarmClock.EXTRA_SKIP_UI, true); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Zum Aufrufen des Intents ACTION_SET_TIMER
muss Ihre App die Berechtigung SET_ALARM
haben:
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
Beispiel für Intent-Filter:
<activity ...> <intent-filter> <action android:name="android.intent.action.SET_TIMER" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Alle Weckzeiten anzeigen
Verwenden Sie die Aktion ACTION_SHOW_ALARMS
, um die Liste der Alarme aufzurufen.
Dieser Intent wird zwar nicht von vielen Apps aufgerufen, da er hauptsächlich von System-Apps verwendet wird, aber jede App, die sich wie ein Wecker verhält, kann diesen Intent-Filter implementieren und mit der Anzeige der Liste der aktuellen Wecker reagieren.
Hinweis:Diese Absicht ist ab Android 4.4 (API-Level 19) verfügbar.
- Aktion
ACTION_SHOW_ALARMS
- Daten-URI
- Keine
- MIME-Typ
- Keine
Beispiel für Intent-Filter:
<activity ...> <intent-filter> <action android:name="android.intent.action.SHOW_ALARMS" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Kalender
Das Hinzufügen eines Termins ist eine häufige Aktion für Kalender-Apps. Erstellen Sie einen Intent-Filter, um die Fähigkeit Ihrer App, diese Aktion auszuführen, mithilfe der Informationen im folgenden Abschnitt zu bewerben.
Kalendertermin hinzufügen
Wenn Sie dem Kalender des Nutzers einen neuen Termin hinzufügen möchten, verwenden Sie die Aktion ACTION_INSERT
und geben Sie den Daten-URI mit Events.CONTENT_URI
an.
Mit den folgenden Extras können Sie dann verschiedene Ereignisdetails angeben.
- Aktion
ACTION_INSERT
- Daten-URI
Events.CONTENT_URI
- MIME-Typ
"vnd.android.cursor.dir/event"
- Extras
-
EXTRA_EVENT_ALL_DAY
- Ein boolescher Wert, der angibt, ob es sich um einen ganztägigen Termin handelt.
EXTRA_EVENT_BEGIN_TIME
- Die Startzeit des Ereignisses (Millisekunden seit der Epoche).
EXTRA_EVENT_END_TIME
- Die Endzeit des Ereignisses (Millisekunden seit der Epoche).
TITLE
- Der Titel des Termins.
DESCRIPTION
- Die Ereignisbeschreibung.
EVENT_LOCATION
- Der Veranstaltungsort.
EXTRA_EMAIL
- Eine durch Kommas getrennte Liste von E‑Mail-Adressen, die die Eingeladenen angibt.
Viele weitere Ereignisdetails können mit den in der Klasse
CalendarContract.EventsColumns
definierten Konstanten angegeben werden.
Beispiel für Intention:
Kotlin
fun addEvent(title: String, location: String, begin: Long, end: Long) { val intent = Intent(Intent.ACTION_INSERT).apply { data = Events.CONTENT_URI putExtra(Events.TITLE, title) putExtra(Events.EVENT_LOCATION, location) putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, begin) putExtra(CalendarContract.EXTRA_EVENT_END_TIME, end) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void addEvent(String title, String location, long begin, long end) { Intent intent = new Intent(Intent.ACTION_INSERT) .setData(Events.CONTENT_URI) .putExtra(Events.TITLE, title) .putExtra(Events.EVENT_LOCATION, location) .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, begin) .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, end); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Beispiel für Intent-Filter:
<activity ...> <intent-filter> <action android:name="android.intent.action.INSERT" /> <data android:mimeType="vnd.android.cursor.dir/event" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Kamera
Im Folgenden finden Sie häufige Aktionen für Kamera-Apps, einschließlich der Informationen, die Sie zum Erstellen eines Intent-Filters benötigen, um die Fähigkeit Ihrer App zur Ausführung der jeweiligen Aktion zu bewerben.
Ein Bild oder Video aufnehmen und zurückgeben
Wenn Sie eine Kamera-App öffnen und das resultierende Foto oder Video empfangen möchten, verwenden Sie die Aktion ACTION_IMAGE_CAPTURE
oder ACTION_VIDEO_CAPTURE
. Geben Sie außerdem den URI-Speicherort an, an dem die Kamera das Foto oder Video speichern soll, im EXTRA_OUTPUT
-Extra an.
- Aktion
ACTION_IMAGE_CAPTURE
oder
ACTION_VIDEO_CAPTURE
- Data-URI-Schema
- Keine
- MIME-Typ
- Keine
- Extras
-
EXTRA_OUTPUT
- Der URI-Speicherort, an dem die Kamera-App die Foto- oder Videodatei als
Uri
-Objekt speichert.
Wenn die Kamera-App den Fokus erfolgreich an Ihre Aktivität zurückgibt, d. h. Ihre App den onActivityResult()
-Callback empfängt, können Sie über den URI, den Sie mit dem EXTRA_OUTPUT
-Wert angegeben haben, auf das Foto oder Video zugreifen.
Hinweis:Wenn Sie ACTION_IMAGE_CAPTURE
verwenden, um ein Foto aufzunehmen, gibt die Kamera möglicherweise auch eine verkleinerte Kopie oder ein Miniaturbild des Fotos im Ergebnis Intent
zurück, das als Bitmap
in einem zusätzlichen Feld mit dem Namen "data"
gespeichert wird.
Beispiel für Intention:
Kotlin
const val REQUEST_IMAGE_CAPTURE = 1 val locationForPhotos: Uri = ... fun capturePhoto(targetFilename: String) { val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE).apply { putExtra(MediaStore.EXTRA_OUTPUT, Uri.withAppendedPath(locationForPhotos, targetFilename)) } if (intent.resolveActivity(packageManager) != null) { startActivityForResult(intent, REQUEST_IMAGE_CAPTURE) } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK) { val thumbnail: Bitmap = data.getParcelableExtra("data") // Do other work with full size photo saved in locationForPhotos. ... } }
Java
static final int REQUEST_IMAGE_CAPTURE = 1; static final Uri locationForPhotos; public void capturePhoto(String targetFilename) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.withAppendedPath(locationForPhotos, targetFilename)); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { Bitmap thumbnail = data.getParcelableExtra("data"); // Do other work with full size photo saved in locationForPhotos. ... } }
Wenn Sie unter Android 12 (API‑Level 31) oder höher arbeiten, finden Sie hier ein Beispiel für einen Intent.
Beispiel für Intention:
Kotlin
val REQUEST_IMAGE_CAPTURE = 1 private fun dispatchTakePictureIntent() { val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) try { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE) } catch (e: ActivityNotFoundException) { // Display error state to the user. } }
Java
static final int REQUEST_IMAGE_CAPTURE = 1; private void dispatchTakePictureIntent() { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); try { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); } catch (ActivityNotFoundException e) { // Display error state to the user. } } </section></div>
Weitere Informationen zur Verwendung dieses Intents zum Aufnehmen eines Fotos, einschließlich der Erstellung eines geeigneten Uri
für den Ausgabespeicherort, finden Sie unter Fotos aufnehmen oder Videos aufnehmen.
Beispiel für Intent-Filter:
<activity ...> <intent-filter> <action android:name="android.media.action.IMAGE_CAPTURE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Wenn Sie diesen Intent verarbeiten, muss Ihre Aktivität das Extra EXTRA_OUTPUT
im eingehenden Intent
prüfen, das aufgenommene Bild oder Video am durch dieses Extra angegebenen Speicherort speichern und setResult()
mit einem Intent
aufrufen, das eine komprimierte Miniaturansicht in einem Extra namens "data"
enthält.
Kamera-App im Standbildmodus starten
Verwenden Sie die Aktion INTENT_ACTION_STILL_IMAGE_CAMERA
, um eine Kamera-App im Standbildmodus zu öffnen.
- Aktion
INTENT_ACTION_STILL_IMAGE_CAMERA
- Data-URI-Schema
- Keine
- MIME-Typ
- Keine
- Extras
- Keine
Beispiel für Intention:
Kotlin
private fun dispatchTakePictureIntent() { val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) try { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE) } catch (e: ActivityNotFoundException) { // Display error state to the user. } }
Java
public void capturePhoto(String targetFilename) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.withAppendedPath(locationForPhotos, targetFilename)); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); } }
Beispiel für Intent-Filter:
<activity ...> <intent-filter> <action android:name="android.media.action.STILL_IMAGE_CAMERA" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Kamera-App im Videomodus starten
Wenn Sie eine Kamera-App im Videomodus öffnen möchten, verwenden Sie die Aktion INTENT_ACTION_VIDEO_CAMERA
.
- Aktion
INTENT_ACTION_VIDEO_CAMERA
- Data-URI-Schema
- Keine
- MIME-Typ
- Keine
- Extras
- Keine
Beispiel für Intention:
Kotlin
fun capturePhoto() { val intent = Intent(MediaStore.INTENT_ACTION_VIDEO_CAMERA) if (intent.resolveActivity(packageManager) != null) { startActivityForResult(intent, REQUEST_IMAGE_CAPTURE) } }
Java
public void capturePhoto() { Intent intent = new Intent(MediaStore.INTENT_ACTION_VIDEO_CAMERA); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); } }
Beispiel für Intent-Filter:
<activity ...> <intent-filter> <action android:name="android.media.action.VIDEO_CAMERA" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Kontakte-App
Im Folgenden finden Sie häufige Aktionen für Apps zur Kontaktverwaltung, einschließlich der Informationen, die Sie zum Erstellen eines Intent-Filters benötigen, um die Fähigkeit Ihrer App zu bewerben, jede Aktion auszuführen.
Kontakt auswählen
Wenn der Nutzer einen Kontakt auswählen und Ihrer App Zugriff auf alle Kontaktdaten gewähren soll, verwenden Sie die Aktion ACTION_PICK
und geben Sie den MIME-Typ Contacts.CONTENT_TYPE
an.
Das Ergebnis Intent
, das an Ihren onActivityResult()
-Callback gesendet wird, enthält den content:
-URI, der auf den ausgewählten Kontakt verweist. Die Antwort gewährt Ihrer App temporäre Berechtigungen zum Lesen dieses Kontakts über die Contacts Provider API, auch wenn Ihre App nicht die Berechtigung READ_CONTACTS
enthält.
Tipp:Wenn Sie nur auf bestimmte Kontaktdaten wie eine Telefonnummer oder E-Mail-Adresse zugreifen müssen, lesen Sie den nächsten Abschnitt zum Auswählen bestimmter Kontaktdaten.
- Aktion
ACTION_PICK
- Data-URI-Schema
- Keine
- MIME-Typ
Contacts.CONTENT_TYPE
Beispiel für Intention:
Kotlin
const val REQUEST_SELECT_CONTACT = 1 fun selectContact() { val intent = Intent(Intent.ACTION_PICK).apply { type = ContactsContract.Contacts.CONTENT_TYPE } if (intent.resolveActivity(packageManager) != null) { startActivityForResult(intent, REQUEST_SELECT_CONTACT) } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { if (requestCode == REQUEST_SELECT_CONTACT && resultCode == RESULT_OK) { val contactUri: Uri = data.data // Do something with the selected contact at contactUri. //... } }
Java
static final int REQUEST_SELECT_CONTACT = 1; public void selectContact() { Intent intent = new Intent(Intent.ACTION_PICK); intent.setType(ContactsContract.Contacts.CONTENT_TYPE); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, REQUEST_SELECT_CONTACT); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_SELECT_CONTACT && resultCode == RESULT_OK) { Uri contactUri = data.getData(); // Do something with the selected contact at contactUri. ... } }
Informationen zum Abrufen von Kontaktdetails, sobald Sie den Kontakt-URI haben, finden Sie unter Details zu einem Kontakt abrufen.
Wenn Sie den Kontakt-URI mit diesem Intent abrufen, benötigen Sie in der Regel nicht die Berechtigung READ_CONTACTS
, um grundlegende Details für diesen Kontakt zu lesen, z. B. den Anzeigenamen und ob der Kontakt mit einem Sternchen markiert ist. Wenn Sie jedoch genauere Daten zu einem bestimmten Kontakt lesen möchten, z. B. dessen Telefonnummer oder E-Mail-Adresse, benötigen Sie die Berechtigung READ_CONTACTS
.
Bestimmte Kontaktdaten auswählen
Wenn der Nutzer bestimmte Informationen aus einem Kontakt auswählen soll, z. B. eine Telefonnummer, E‑Mail-Adresse oder einen anderen Datentyp, verwenden Sie die Aktion ACTION_PICK
und geben Sie den MIME-Typ für einen der folgenden Inhaltstypen an, z. B. CommonDataKinds.Phone.CONTENT_TYPE
, um die Telefonnummer des Kontakts abzurufen.
Hinweis : In vielen Fällen benötigt Ihre App die Berechtigung READ_CONTACTS
, um bestimmte Informationen zu einem bestimmten Kontakt aufrufen zu können.
Wenn Sie nur einen Datentyp aus einem Kontakt abrufen müssen, ist diese Methode mit einem CONTENT_TYPE
aus den ContactsContract.CommonDataKinds
-Klassen effizienter als die Verwendung von Contacts.CONTENT_TYPE
, wie im vorherigen Abschnitt gezeigt. Das Ergebnis bietet Ihnen direkten Zugriff auf die gewünschten Daten, ohne dass Sie eine komplexere Abfrage für den Kontakteanbieter ausführen müssen.
Das Ergebnis Intent
, das an Ihren onActivityResult()
-Callback gesendet wird, enthält den content:
-URI, der auf die ausgewählten Kontaktdaten verweist. Die Antwort erteilt Ihrer App temporäre Berechtigungen zum Lesen dieser Kontaktdaten, auch wenn Ihre App die Berechtigung READ_CONTACTS
nicht enthält.
- Aktion
ACTION_PICK
- Data-URI-Schema
- Keine
- MIME-Typ
-
CommonDataKinds.Phone.CONTENT_TYPE
- Wählen Sie einen Kontakt mit einer Telefonnummer aus.
CommonDataKinds.Email.CONTENT_TYPE
- Kontakte mit einer E‑Mail-Adresse auswählen.
CommonDataKinds.StructuredPostal.CONTENT_TYPE
- Wählen Sie einen Kontakt mit einer Postadresse aus.
Oder einer der vielen anderen
CONTENT_TYPE
-Werte unterContactsContract
.
Beispiel für Intention:
Kotlin
const val REQUEST_SELECT_PHONE_NUMBER = 1 fun selectContact() { // Start an activity for the user to pick a phone number from contacts. val intent = Intent(Intent.ACTION_PICK).apply { type = CommonDataKinds.Phone.CONTENT_TYPE } if (intent.resolveActivity(packageManager) != null) { startActivityForResult(intent, REQUEST_SELECT_PHONE_NUMBER) } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { if (requestCode == REQUEST_SELECT_PHONE_NUMBER && resultCode == Activity.RESULT_OK) { // Get the URI and query the content provider for the phone number. val contactUri: Uri = data.data val projection: Array<String> = arrayOf(CommonDataKinds.Phone.NUMBER) contentResolver.query(contactUri, projection, null, null, null).use { cursor -> // If the cursor returned is valid, get the phone number. if (cursor.moveToFirst()) { val numberIndex = cursor.getColumnIndex(CommonDataKinds.Phone.NUMBER) val number = cursor.getString(numberIndex) // Do something with the phone number. ... } } } }
Java
static final int REQUEST_SELECT_PHONE_NUMBER = 1; public void selectContact() { // Start an activity for the user to pick a phone number from contacts. Intent intent = new Intent(Intent.ACTION_PICK); intent.setType(CommonDataKinds.Phone.CONTENT_TYPE); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, REQUEST_SELECT_PHONE_NUMBER); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_SELECT_PHONE_NUMBER && resultCode == RESULT_OK) { // Get the URI and query the content provider for the phone number. Uri contactUri = data.getData(); String[] projection = new String[]{CommonDataKinds.Phone.NUMBER}; Cursor cursor = getContentResolver().query(contactUri, projection, null, null, null); // If the cursor returned is valid, get the phone number. if (cursor != null && cursor.moveToFirst()) { int numberIndex = cursor.getColumnIndex(CommonDataKinds.Phone.NUMBER); String number = cursor.getString(numberIndex); // Do something with the phone number. //... } } }
Kontakte ansehen
Verwenden Sie die Aktion ACTION_VIEW
, um die Details für einen bekannten Kontakt aufzurufen, und geben Sie den Kontakt mit einem content:
-URI als Intent-Daten an.
Es gibt zwei Hauptmethoden, um den URI des Kontakts abzurufen:
- Verwenden Sie den Kontakt-URI, der von der
ACTION_PICK
-Aktion zurückgegeben wurde, die im vorherigen Abschnitt gezeigt wird. Für diesen Ansatz sind keine App-Berechtigungen erforderlich. - Greifen Sie direkt auf die Liste aller Kontakte zu, wie unter Liste mit Kontakten abrufen beschrieben. Für diesen Ansatz ist die Berechtigung
READ_CONTACTS
erforderlich.
- Aktion
ACTION_VIEW
- Data-URI-Schema
content:<URI>
- MIME-Typ
- Keine. Der Typ wird aus der Kontakt-URI abgeleitet.
Beispiel für Intention:
Kotlin
fun viewContact(contactUri: Uri) { val intent = Intent(Intent.ACTION_VIEW, contactUri) if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void viewContact(Uri contactUri) { Intent intent = new Intent(Intent.ACTION_VIEW, contactUri); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Vorhandenen Kontakt bearbeiten
Wenn Sie einen bekannten Kontakt bearbeiten möchten, verwenden Sie die Aktion ACTION_EDIT
, geben Sie den Kontakt mit einem content:
-URI als Intent-Daten an und fügen Sie alle bekannten Kontaktdaten in Extras ein, die durch Konstanten in ContactsContract.Intents.Insert
angegeben werden.
Es gibt zwei primäre Möglichkeiten, die Kontakt-URI abzurufen:
- Verwenden Sie den Kontakt-URI, der von der
ACTION_PICK
-Aktion zurückgegeben wurde, die im vorherigen Abschnitt gezeigt wird. Für diesen Ansatz sind keine App-Berechtigungen erforderlich. - Greifen Sie direkt auf die Liste aller Kontakte zu, wie unter Liste mit Kontakten abrufen beschrieben. Für diesen Ansatz ist die Berechtigung
READ_CONTACTS
erforderlich.
- Aktion
ACTION_EDIT
- Data-URI-Schema
content:<URI>
- MIME-Typ
- Der Typ wird aus der Kontakt-URI abgeleitet.
- Extras
- Eines oder mehrere der in
ContactsContract.Intents.Insert
definierten Extras, damit Sie Felder der Kontaktdaten ausfüllen können.
Beispiel für Intention:
Kotlin
fun editContact(contactUri: Uri, email: String) { val intent = Intent(Intent.ACTION_EDIT).apply { data = contactUri putExtra(ContactsContract.Intents.Insert.EMAIL, email) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void editContact(Uri contactUri, String email) { Intent intent = new Intent(Intent.ACTION_EDIT); intent.setData(contactUri); intent.putExtra(Intents.Insert.EMAIL, email); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Weitere Informationen zum Bearbeiten eines Kontakts finden Sie unter Kontakte mithilfe von Intents ändern.
Kontakt einfügen
Verwenden Sie die Aktion ACTION_INSERT
, um einen neuen Kontakt einzufügen. Geben Sie Contacts.CONTENT_TYPE
als MIME-Typ an und fügen Sie alle bekannten Kontaktinformationen in Extras ein, die durch Konstanten in ContactsContract.Intents.Insert
angegeben werden.
- Aktion
ACTION_INSERT
- Data-URI-Schema
- Keine
- MIME-Typ
Contacts.CONTENT_TYPE
- Extras
- Eines oder mehrere der in
ContactsContract.Intents.Insert
definierten Extras.
Beispiel für Intention:
Kotlin
fun insertContact(name: String, email: String) { val intent = Intent(Intent.ACTION_INSERT).apply { type = ContactsContract.Contacts.CONTENT_TYPE putExtra(ContactsContract.Intents.Insert.NAME, name) putExtra(ContactsContract.Intents.Insert.EMAIL, email) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void insertContact(String name, String email) { Intent intent = new Intent(Intent.ACTION_INSERT); intent.setType(Contacts.CONTENT_TYPE); intent.putExtra(Intents.Insert.NAME, name); intent.putExtra(Intents.Insert.EMAIL, email); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Weitere Informationen zum Einfügen eines Kontakts finden Sie unter Kontakte mit Intents ändern.
Das Verfassen einer E‑Mail mit optionalen Anhängen ist eine gängige Aktion für E‑Mail-Apps. Erstellen Sie einen Intent-Filter, um die Fähigkeit Ihrer App, diese Aktion auszuführen, mit den Informationen im folgenden Abschnitt zu bewerben.
E‑Mail mit optionalen Anhängen verfassen
Verwenden Sie zum Verfassen einer E‑Mail eine der folgenden Aktionen, je nachdem, ob Sie Anhänge einfügen möchten oder nicht. Geben Sie außerdem E‑Mail-Details wie den Empfänger und den Betreff mit den aufgeführten zusätzlichen Schlüsseln an.
- Aktion
ACTION_SENDTO
(für keinen Anhang) oder
ACTION_SEND
(für einen Anhang) oder
ACTION_SEND_MULTIPLE
(für mehrere Anhänge)- Data-URI-Schema
- Keine
- MIME-Typ
-
"text/plain"
"*/*"
- Extras
-
Intent.EXTRA_EMAIL
- Ein String-Array mit allen E-Mail-Adressen der „An“-Empfänger.
Intent.EXTRA_CC
- Ein String-Array mit allen E-Mail-Adressen der „CC“-Empfänger.
Intent.EXTRA_BCC
- Ein String-Array mit allen E-Mail-Adressen der „BCC“-Empfänger.
Intent.EXTRA_SUBJECT
- Ein String mit dem E‑Mail-Betreff.
Intent.EXTRA_TEXT
- Ein String mit dem Text der E‑Mail.
Intent.EXTRA_STREAM
- Ein
Uri
, das auf den Anhang verweist. Wenn Sie die AktionACTION_SEND_MULTIPLE
verwenden, ist dies stattdessen einArrayList
mit mehrerenUri
-Objekten.
Beispiel für Intention:
Kotlin
fun composeEmail(addresses: Array<String>, subject: String, attachment: Uri) { val intent = Intent(Intent.ACTION_SEND).apply { type = "*/*" putExtra(Intent.EXTRA_EMAIL, addresses) putExtra(Intent.EXTRA_SUBJECT, subject) putExtra(Intent.EXTRA_STREAM, attachment) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void composeEmail(String[] addresses, String subject, Uri attachment) { Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("*/*"); intent.putExtra(Intent.EXTRA_EMAIL, addresses); intent.putExtra(Intent.EXTRA_SUBJECT, subject); intent.putExtra(Intent.EXTRA_STREAM, attachment); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Wenn Sie dafür sorgen möchten, dass Ihre Intention nur von einer E‑Mail-App und nicht von einer SMS- oder Social-Media-App verarbeitet wird, verwenden Sie die Aktion ACTION_SENDTO
und das Datenschema "mailto:"
, wie im folgenden Beispiel gezeigt:
Kotlin
fun composeEmail(addresses: Array<String>, subject: String) { val intent = Intent(Intent.ACTION_SENDTO).apply { data = Uri.parse("mailto:") // Only email apps handle this. putExtra(Intent.EXTRA_EMAIL, addresses) putExtra(Intent.EXTRA_SUBJECT, subject) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void composeEmail(String[] addresses, String subject) { Intent intent = new Intent(Intent.ACTION_SENDTO); intent.setData(Uri.parse("mailto:")); // Only email apps handle this. intent.putExtra(Intent.EXTRA_EMAIL, addresses); intent.putExtra(Intent.EXTRA_SUBJECT, subject); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Beispiel für Intent-Filter:
<activity ...> <intent-filter> <action android:name="android.intent.action.SEND" /> <data android:type="*/*" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.SENDTO" /> <data android:scheme="mailto" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Dateispeicher
Im Folgenden finden Sie häufige Aktionen für Dateispeicher-Apps, einschließlich der Informationen, die Sie zum Erstellen eines Intent-Filters benötigen, um die Fähigkeit Ihrer App zu bewerben, jede Aktion auszuführen.
Bestimmten Dateityp abrufen
Wenn Sie den Nutzer auffordern möchten, eine Datei wie ein Dokument oder ein Foto auszuwählen, und eine Referenz an Ihre App zurückgeben möchten, verwenden Sie die Aktion ACTION_GET_CONTENT
und geben Sie den gewünschten MIME-Typ an. Der an Ihre App zurückgegebene Dateiverweis ist nur für den aktuellen Lebenszyklus Ihrer Aktivität gültig. Wenn Sie später darauf zugreifen möchten, müssen Sie eine Kopie importieren, die Sie später lesen können.
Mit diesem Intent kann der Nutzer auch eine neue Datei erstellen. Anstatt ein vorhandenes Foto auszuwählen, kann der Nutzer beispielsweise ein neues Foto mit der Kamera aufnehmen.
Der Ergebnis-Intent, der an Ihre onActivityResult()
-Methode gesendet wird, enthält Daten mit einem URI, der auf die Datei verweist.
Der URI kann beliebig sein, z. B. ein http:
-URI, ein file:
-URI oder ein content:
-URI. Wenn Sie jedoch die auswählbaren Dateien auf diejenigen beschränken möchten, die über einen Contentanbieter (einen content:
-URI) zugänglich sind und die als Dateistream mit openFileDescriptor()
verfügbar sind, fügen Sie Ihrem Intent die Kategorie CATEGORY_OPENABLE
hinzu.
Unter Android 4.3 (API-Level 18) und höher können Sie dem Nutzer auch erlauben, mehrere Dateien auszuwählen. Dazu fügen Sie dem Intent EXTRA_ALLOW_MULTIPLE
hinzu und legen es auf true
fest.
Sie können dann auf jede der ausgewählten Dateien in einem ClipData
-Objekt zugreifen, das von getClipData()
zurückgegeben wird.
- Aktion
ACTION_GET_CONTENT
- Data-URI-Schema
- Keine
- MIME-Typ
- Der MIME-Typ, der dem Dateityp entspricht, den der Nutzer auswählen muss.
- Extras
-
EXTRA_ALLOW_MULTIPLE
- Ein boolescher Wert, der angibt, ob der Nutzer mehr als eine Datei gleichzeitig auswählen kann.
EXTRA_LOCAL_ONLY
- Ein boolescher Wert, der angibt, ob die zurückgegebene Datei direkt auf dem Gerät verfügbar sein muss, anstatt dass sie von einem Remotedienst heruntergeladen werden muss.
- Kategorie (optional)
-
CATEGORY_OPENABLE
- Gibt nur „öffnungsfähige“ Dateien zurück, die als Dateistream mit
openFileDescriptor()
dargestellt werden können.
Beispiel für Intention zum Abrufen eines Fotos:
Kotlin
const val REQUEST_IMAGE_GET = 1 fun selectImage() { val intent = Intent(Intent.ACTION_GET_CONTENT).apply { type = "image/*" } if (intent.resolveActivity(packageManager) != null) { startActivityForResult(intent, REQUEST_IMAGE_GET) } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { if (requestCode == REQUEST_IMAGE_GET && resultCode == Activity.RESULT_OK) { val thumbnail: Bitmap = data.getParcelableExtra("data") val fullPhotoUri: Uri = data.data // Do work with photo saved at fullPhotoUri. ... } }
Java
static final int REQUEST_IMAGE_GET = 1; public void selectImage() { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("image/*"); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, REQUEST_IMAGE_GET); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_IMAGE_GET && resultCode == RESULT_OK) { Bitmap thumbnail = data.getParcelable("data"); Uri fullPhotoUri = data.getData(); // Do work with photo saved at fullPhotoUri. ... } }
Beispiel für Intent-Filter zum Zurückgeben eines Fotos:
<activity ...> <intent-filter> <action android:name="android.intent.action.GET_CONTENT" /> <data android:type="image/*" /> <category android:name="android.intent.category.DEFAULT" /> <!-- The OPENABLE category declares that the returned file is accessible from a content provider that supportsOpenableColumns
andContentResolver.openFileDescriptor()
. --> <category android:name="android.intent.category.OPENABLE" /> </intent-filter> </activity>
Bestimmten Dateityp öffnen
Anstatt eine Kopie einer Datei abzurufen, die Sie in Ihre App importieren müssen, können Sie mit der Aktion ACTION_GET_CONTENT
unter Android 4.4 oder höher stattdessen anfordern, dass eine Datei, die von einer anderen App verwaltet wird, mit der Aktion ACTION_OPEN_DOCUMENT
und Angabe eines MIME-Typs geöffnet wird.
Wenn der Nutzer auch ein neues Dokument erstellen soll, in das Ihre App schreiben kann, verwenden Sie stattdessen die Aktion ACTION_CREATE_DOCUMENT
.
Mit dem ACTION_CREATE_DOCUMENT
-Intent können Nutzer beispielsweise auswählen, wo sie ein neues Dokument erstellen möchten, z. B. in einer anderen App, die den Speicherort des Dokuments verwaltet, anstatt aus vorhandenen PDF-Dokumenten auszuwählen. Ihre App erhält dann den URI-Speicherort, an dem sie das neue Dokument schreiben kann.
Während der Intent, der über die Aktion ACTION_GET_CONTENT
an die Methode onActivityResult()
übergeben wird, einen URI beliebigen Typs zurückgeben kann, wird im Ergebnis-Intent von ACTION_OPEN_DOCUMENT
und ACTION_CREATE_DOCUMENT
die ausgewählte Datei immer als content:
-URI angegeben, der von einem DocumentsProvider
unterstützt wird. Sie können die Datei mit openFileDescriptor()
öffnen und ihre Details mit Spalten aus DocumentsContract.Document
abfragen.
Der zurückgegebene URI gewährt Ihrer App langfristigen Lesezugriff auf die Datei, möglicherweise auch mit Schreibzugriff. Die Aktion ACTION_OPEN_DOCUMENT
ist besonders nützlich, wenn Sie eine vorhandene Datei lesen möchten, ohne eine Kopie in Ihrer App zu erstellen, oder wenn Sie eine Datei direkt öffnen und bearbeiten möchten.
Sie können dem Nutzer auch die Auswahl mehrerer Dateien ermöglichen, indem Sie dem Intent EXTRA_ALLOW_MULTIPLE
hinzufügen und auf true
setzen.
Wenn der Nutzer nur ein Element auswählt, können Sie es aus getData()
abrufen.
Wenn der Nutzer mehr als ein Element auswählt, gibt getData()
„null“ zurück. Sie müssen dann stattdessen jedes Element aus einem ClipData
-Objekt abrufen, das von getClipData()
zurückgegeben wird.
Hinweis:In Ihrem Intent muss ein MIME-Typ angegeben und die Kategorie CATEGORY_OPENABLE
muss deklariert werden. Bei Bedarf können Sie mehrere MIME-Typen angeben, indem Sie ein Array von MIME-Typen mit dem Extra EXTRA_MIME_TYPES
hinzufügen. In diesem Fall müssen Sie den primären MIME-Typ in setType()
auf "*/*"
festlegen.
- Aktion
ACTION_OPEN_DOCUMENT
oder
ACTION_CREATE_DOCUMENT
- Data-URI-Schema
- Keine
- MIME-Typ
- Der MIME-Typ, der dem Dateityp entspricht, den der Nutzer auswählen muss.
- Extras
-
EXTRA_MIME_TYPES
- Ein Array von MIME-Typen, die den Dateitypen entsprechen, die Ihre App anfordert. Wenn Sie dieses Extra verwenden, müssen Sie den primären MIME-Typ in
setType()
auf"*/*"
festlegen. EXTRA_ALLOW_MULTIPLE
- Ein boolescher Wert, der angibt, ob der Nutzer mehr als eine Datei gleichzeitig auswählen kann.
EXTRA_TITLE
- Zur Verwendung mit
ACTION_CREATE_DOCUMENT
, um einen anfänglichen Dateinamen anzugeben. EXTRA_LOCAL_ONLY
- Ein boolescher Wert, der angibt, ob die zurückgegebene Datei direkt auf dem Gerät verfügbar sein muss, anstatt dass sie von einem Remotedienst heruntergeladen werden muss.
- Category
-
CATEGORY_OPENABLE
- Gibt nur „öffnungsfähige“ Dateien zurück, die als Dateistream mit
openFileDescriptor()
dargestellt werden können.
Beispiel für Intention zum Abrufen eines Fotos:
Kotlin
const val REQUEST_IMAGE_OPEN = 1 fun selectImage2() { val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply { type = "image/*" addCategory(Intent.CATEGORY_OPENABLE) } // Only the system receives the ACTION_OPEN_DOCUMENT, so no need to test. startActivityForResult(intent, REQUEST_IMAGE_OPEN) } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { if (requestCode == REQUEST_IMAGE_OPEN && resultCode == Activity.RESULT_OK) { val fullPhotoUri: Uri = data.data // Do work with full size photo saved at fullPhotoUri. ... } }
Java
static final int REQUEST_IMAGE_OPEN = 1; public void selectImage() { Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); intent.setType("image/*"); intent.addCategory(Intent.CATEGORY_OPENABLE); // Only the system receives the ACTION_OPEN_DOCUMENT, so no need to test. startActivityForResult(intent, REQUEST_IMAGE_OPEN); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_IMAGE_OPEN && resultCode == RESULT_OK) { Uri fullPhotoUri = data.getData(); // Do work with full size photo saved at fullPhotoUri. ... } }
Drittanbieter-Apps können nicht mit der Aktion ACTION_OPEN_DOCUMENT
auf einen Intent reagieren. Stattdessen empfängt das System diesen Intent und zeigt alle Dateien an, die in verschiedenen Apps verfügbar sind, und zwar in einer einheitlichen Benutzeroberfläche.
Wenn Sie die Dateien Ihrer App in dieser Benutzeroberfläche bereitstellen und andere Apps sie öffnen lassen möchten, müssen Sie eine DocumentsProvider
implementieren und einen Intent-Filter für PROVIDER_INTERFACE
("android.content.action.DOCUMENTS_PROVIDER"
) einfügen, wie im folgenden Beispiel gezeigt:
<provider ... android:grantUriPermissions="true" android:exported="true" android:permission="android.permission.MANAGE_DOCUMENTS"> <intent-filter> <action android:name="android.content.action.DOCUMENTS_PROVIDER" /> </intent-filter> </provider>
Weitere Informationen dazu, wie Sie die von Ihrer App verwalteten Dateien in anderen Apps öffnen können, finden Sie unter Dateien mithilfe des Storage Access Framework öffnen.
Lokale Aktionen
Ein Auto zu rufen ist eine häufige lokale Aktion. Erstellen Sie einen Intent-Filter, um die Fähigkeit Ihrer App, diese Aktion auszuführen, mithilfe der Informationen im folgenden Abschnitt zu bewerben.
Taxi rufen
Verwenden Sie die Aktion ACTION_RESERVE_TAXI_RESERVATION
, um ein Taxi zu rufen.
Hinweis:Apps müssen den Nutzer um Bestätigung bitten, bevor diese Aktion ausgeführt wird.
- Aktion
ACTION_RESERVE_TAXI_RESERVATION
- Daten-URI
- Keine
- MIME-Typ
- Keine
- Extras
- Keine
Beispiel für Intention:
Kotlin
fun callCar() { val intent = Intent(ReserveIntents.ACTION_RESERVE_TAXI_RESERVATION) if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void callCar() { Intent intent = new Intent(ReserveIntents.ACTION_RESERVE_TAXI_RESERVATION); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Beispiel für Intent-Filter:
<activity ...> <intent-filter> <action android:name="com.google.android.gms.actions.RESERVE_TAXI_RESERVATION" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Maps
Die Anzeige eines Orts auf einer Karte ist eine gängige Aktion für Karten-Apps. Erstellen Sie einen Intent-Filter, um die Fähigkeit Ihrer App, diese Aktion auszuführen, mit den Informationen im folgenden Abschnitt zu bewerben.
Standort auf einer Karte anzeigen
Verwenden Sie die Aktion ACTION_VIEW
, um eine Karte zu öffnen, und geben Sie die Standortinformationen in den Intent-Daten mit einem der folgenden Schemas an.
- Aktion
ACTION_VIEW
- Data-URI-Schema
-
geo:latitude,longitude
- Zeige die Karte mit dem angegebenen Längen- und Breitengrad an.
Beispiel:
"geo:47.6,-122.3"
geo:latitude,longitude?z=zoom
- Karte mit dem angegebenen Längen- und Breitengrad bei einer bestimmten Zoomstufe anzeigen. Bei einer Zoomstufe von 1 wird die gesamte Erde mit dem angegebenen lat,lng als Mittelpunkt angezeigt. Die höchste (nächste) Zoomstufe ist 23.
Beispiel:
"geo:47.6,-122.3?z=11"
geo:0,0?q=lat,lng(label)
- Karte mit dem angegebenen Längen- und Breitengrad mit einem String-Label anzeigen.
Beispiel:
"geo:0,0?q=34.99,-106.61(Treasure)"
geo:0,0?q=my+street+address
- Zeige den Standort für „meine Adresse“ an. Das kann eine bestimmte Adresse oder eine Standortanfrage sein.
Beispiel:
"geo:0,0?q=1600+Amphitheatre+Parkway%2C+CA"
Hinweis:Alle im
geo
-URI übergebenen Strings müssen codiert werden. Aus dem String1st & Pike, Seattle
wird beispielsweise1st%20%26%20Pike%2C%20Seattle
. Leerzeichen im String werden mit%20
codiert oder durch ein Pluszeichen (+
) ersetzt.
- MIME-Typ
- Keine
Beispiel für Intention:
Kotlin
fun showMap(geoLocation: Uri) { val intent = Intent(Intent.ACTION_VIEW).apply { data = geoLocation } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void showMap(Uri geoLocation) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(geoLocation); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Beispiel für Intent-Filter:
<activity ...> <intent-filter> <action android:name="android.intent.action.VIEW" /> <data android:scheme="geo" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Musik oder Video
Im Folgenden finden Sie häufige Aktionen für Musik- und Video-Apps sowie die Informationen, die Sie zum Erstellen eines Intent-Filters benötigen, um die Fähigkeit Ihrer App zu bewerben, die jeweilige Aktion auszuführen.
Mediendatei abspielen
Verwende zum Abspielen einer Musikdatei die Aktion ACTION_VIEW
und gib den URI-Speicherort der Datei in den Intent-Daten an.
- Aktion
ACTION_VIEW
- Data-URI-Schema
-
file:<URI>
content:<URI>
http:<URL>
- MIME-Typ
-
"audio/*"
"application/ogg"
"application/x-ogg"
"application/itunes"
- oder andere, die für Ihre App erforderlich sind.
Beispiel für Intention:
Kotlin
fun playMedia(file: Uri) { val intent = Intent(Intent.ACTION_VIEW).apply { data = file } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void playMedia(Uri file) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(file); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Beispiel für Intent-Filter:
<activity ...> <intent-filter> <action android:name="android.intent.action.VIEW" /> <data android:type="audio/*" /> <data android:type="application/ogg" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Musik basierend auf einer Suchanfrage abspielen
Verwenden Sie den Intent INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH
, um Musik basierend auf einer Suchanfrage abzuspielen. Eine App kann diesen Intent als Reaktion auf den Sprachbefehl des Nutzers zum Abspielen von Musik auslösen. Die empfangende App führt eine Suche in ihrem Bestand durch, um vorhandene Inhalte mit der angegebenen Anfrage abzugleichen, und beginnt mit der Wiedergabe dieser Inhalte.
Fügen Sie in diese Intention das Extra EXTRA_MEDIA_FOCUS
ein, das den gewünschten Suchmodus angibt. Im Suchmodus kann beispielsweise angegeben werden, ob nach einem Künstlernamen oder einem Songtitel gesucht wird.
- Aktion
INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH
- Data-URI-Schema
- Keine
- MIME-Typ
- Keine
- Extras
-
MediaStore.EXTRA_MEDIA_FOCUS
(erforderlich)-
Gibt den Suchmodus an: ob der Nutzer nach einem bestimmten Künstler, Album, Song oder einer bestimmten Playlist sucht. Für die meisten Suchmodi sind zusätzliche Extras erforderlich. Wenn der Nutzer beispielsweise einen bestimmten Song hören möchte, kann der Intent drei zusätzliche Extras enthalten: den Songtitel, den Künstler und das Album. Dieser Intent unterstützt die folgenden Suchmodi für jeden Wert von
EXTRA_MEDIA_FOCUS
:Beliebig –
"vnd.android.cursor.item/*"
-
Jede Art von Musik abspielen Die empfangende App spielt Musik ab, die auf einer intelligenten Auswahl basiert, z. B. die letzte Playlist, die der Nutzer gehört hat.
Zusätzliche Extras:
QUERY
(erforderlich): ein leerer String. Dieses Extra wird immer aus Gründen der Abwärtskompatibilität bereitgestellt. Vorhandene Apps, die keine Suchmodi kennen, können diese Absicht als unstrukturierte Suche verarbeiten.
Unstrukturiert:
"vnd.android.cursor.item/*"
-
Einen bestimmten Song, ein bestimmtes Album oder ein bestimmtes Genre über eine unstrukturierte Suchanfrage abspielen Apps können mit diesem Suchmodus einen Intent generieren, wenn sie den Typ der Inhalte, die der Nutzer hören möchte, nicht identifizieren können. Verwenden Sie nach Möglichkeit spezifischere Suchmodi.
Zusätzliche Extras:
QUERY
(erforderlich): Ein String, der eine beliebige Kombination aus Künstler, Album, Songname oder Genre enthält.
-
Musik aus einem bestimmten Genre spielen
Zusätzliche Extras:
"android.intent.extra.genre"
(erforderlich): Das Genre.QUERY
(erforderlich): Das Genre. Dieses Extra wird immer aus Gründen der Abwärtskompatibilität bereitgestellt. Vorhandene Apps, die keine Suchmodi kennen, können diese Intent als unstrukturierte Suche verarbeiten.
Künstler –
Audio.Artists.ENTRY_CONTENT_TYPE
-
Musik von einem bestimmten Künstler abspielen
Zusätzliche Extras:
EXTRA_MEDIA_ARTIST
(erforderlich): Der Künstler."android.intent.extra.genre"
: das Genre.QUERY
(erforderlich): Ein String, der eine beliebige Kombination aus Künstler und Genre enthält. Dieses Extra wird immer aus Gründen der Abwärtskompatibilität bereitgestellt. Vorhandene Apps, die keine Suchmodi kennen, können diese Intent als unstrukturierte Suche verarbeiten.
Album –
Audio.Albums.ENTRY_CONTENT_TYPE
-
Musik von einem bestimmten Album abspielen
Zusätzliche Extras:
EXTRA_MEDIA_ALBUM
(erforderlich): Das Album.EXTRA_MEDIA_ARTIST
: der Künstler."android.intent.extra.genre"
: das Genre.QUERY
(erforderlich): Ein String, der eine beliebige Kombination aus Album und Künstler enthält. Dieses Extra wird immer aus Gründen der Abwärtskompatibilität bereitgestellt. Vorhandene Apps, die keine Suchmodi kennen, können diese Intent als unstrukturierte Suche verarbeiten.
Song:
"vnd.android.cursor.item/audio"
-
Einen bestimmten Titel abspielen
Zusätzliche Extras:
EXTRA_MEDIA_ALBUM
: das Album.EXTRA_MEDIA_ARTIST
: der Künstler."android.intent.extra.genre"
: das Genre.EXTRA_MEDIA_TITLE
(erforderlich): Der Name des Songs.QUERY
(erforderlich): Ein String, der eine beliebige Kombination aus Album, Künstler, Genre oder Titel enthält. Dieses Extra wird immer aus Gründen der Abwärtskompatibilität bereitgestellt. Vorhandene Apps, die keine Suchmodi kennen, können diese Intent als unstrukturierte Suche verarbeiten.
Playlist:
Audio.Playlists.ENTRY_CONTENT_TYPE
-
Eine bestimmte Playlist oder eine Playlist abspielen, die bestimmten Kriterien entspricht, die durch zusätzliche Extras angegeben werden.
Zusätzliche Extras:
EXTRA_MEDIA_ALBUM
: das Album.EXTRA_MEDIA_ARTIST
: der Künstler."android.intent.extra.genre"
: das Genre."android.intent.extra.playlist"
: die Playlist.EXTRA_MEDIA_TITLE
: Der Songname, auf dem die Playlist basiert.QUERY
(erforderlich): Ein String, der eine beliebige Kombination aus Album, Künstler, Genre, Playlist oder Titel enthält. Dieses Extra wird immer aus Gründen der Abwärtskompatibilität bereitgestellt. Vorhandene Apps, die keine Suchmodi kennen, können diese Absicht als unstrukturierte Suche verarbeiten.
Beispiel für Intention:
Wenn der Nutzer Musik von einem bestimmten Künstler hören möchte, kann eine Such-App den folgenden Intent generieren:
Kotlin
fun playSearchArtist(artist: String) { val intent = Intent(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH).apply { putExtra(MediaStore.EXTRA_MEDIA_FOCUS, MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE) putExtra(MediaStore.EXTRA_MEDIA_ARTIST, artist) putExtra(SearchManager.QUERY, artist) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void playSearchArtist(String artist) { Intent intent = new Intent(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH); intent.putExtra(MediaStore.EXTRA_MEDIA_FOCUS, MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE); intent.putExtra(MediaStore.EXTRA_MEDIA_ARTIST, artist); intent.putExtra(SearchManager.QUERY, artist); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Beispiel für Intent-Filter:
<activity ...> <intent-filter> <action android:name="android.media.action.MEDIA_PLAY_FROM_SEARCH" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Wenn Sie diesen Intent in Ihrer Aktivität verarbeiten, prüfen Sie den Wert des Extra EXTRA_MEDIA_FOCUS
im eingehenden Intent
, um den Suchmodus zu ermitteln. Sobald der Suchmodus ermittelt wurde, lesen Sie die Werte der zusätzlichen Extras für diesen Suchmodus.
Anhand dieser Informationen kann Ihre App dann in ihrem Inventar nach Inhalten suchen, die der Suchanfrage entsprechen. Dies wird im folgenden Beispiel veranschaulicht.
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { ... if (intent.action.compareTo(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH) == 0) { val mediaFocus: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_FOCUS) val query: String? = intent.getStringExtra(SearchManager.QUERY) // Some of these extras might not be available depending on the search mode. val album: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ALBUM) val artist: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ARTIST) val genre: String? = intent.getStringExtra("android.intent.extra.genre") val playlist: String? = intent.getStringExtra("android.intent.extra.playlist") val title: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_TITLE) // Determine the search mode and use the corresponding extras. when { mediaFocus == null -> { // 'Unstructured' search mode (backward compatible) playUnstructuredSearch(query) } mediaFocus.compareTo("vnd.android.cursor.item/*") == 0 -> { if (query?.isNotEmpty() == true) { // 'Unstructured' search mode. playUnstructuredSearch(query) } else { // 'Any' search mode. playResumeLastPlaylist() } } mediaFocus.compareTo(MediaStore.Audio.Genres.ENTRY_CONTENT_TYPE) == 0 -> { // 'Genre' search mode. playGenre(genre) } mediaFocus.compareTo(MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE) == 0 -> { // 'Artist' search mode. playArtist(artist, genre) } mediaFocus.compareTo(MediaStore.Audio.Albums.ENTRY_CONTENT_TYPE) == 0 -> { // 'Album' search mode. playAlbum(album, artist) } mediaFocus.compareTo("vnd.android.cursor.item/audio") == 0 -> { // 'Song' search mode. playSong(album, artist, genre, title) } mediaFocus.compareTo(MediaStore.Audio.Playlists.ENTRY_CONTENT_TYPE) == 0 -> { // 'Playlist' search mode. playPlaylist(album, artist, genre, playlist, title) } } } }
Java
protected void onCreate(Bundle savedInstanceState) { //... Intent intent = this.getIntent(); if (intent.getAction().compareTo(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH) == 0) { String mediaFocus = intent.getStringExtra(MediaStore.EXTRA_MEDIA_FOCUS); String query = intent.getStringExtra(SearchManager.QUERY); // Some of these extras might not be available depending on the search mode. String album = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ALBUM); String artist = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ARTIST); String genre = intent.getStringExtra("android.intent.extra.genre"); String playlist = intent.getStringExtra("android.intent.extra.playlist"); String title = intent.getStringExtra(MediaStore.EXTRA_MEDIA_TITLE); // Determine the search mode and use the corresponding extras. if (mediaFocus == null) { // 'Unstructured' search mode (backward compatible). playUnstructuredSearch(query); } else if (mediaFocus.compareTo("vnd.android.cursor.item/*") == 0) { if (query.isEmpty()) { // 'Any' search mode. playResumeLastPlaylist(); } else { // 'Unstructured' search mode. playUnstructuredSearch(query); } } else if (mediaFocus.compareTo(MediaStore.Audio.Genres.ENTRY_CONTENT_TYPE) == 0) { // 'Genre' search mode. playGenre(genre); } else if (mediaFocus.compareTo(MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE) == 0) { // 'Artist' search mode. playArtist(artist, genre); } else if (mediaFocus.compareTo(MediaStore.Audio.Albums.ENTRY_CONTENT_TYPE) == 0) { // 'Album' search mode. playAlbum(album, artist); } else if (mediaFocus.compareTo("vnd.android.cursor.item/audio") == 0) { // 'Song' search mode. playSong(album, artist, genre, title); } else if (mediaFocus.compareTo(MediaStore.Audio.Playlists.ENTRY_CONTENT_TYPE) == 0) { // 'Playlist' search mode. playPlaylist(album, artist, genre, playlist, title); } } }
Neue Notiz
Das Erstellen einer Notiz ist eine häufige Aktion für Notizen-Apps. Erstellen Sie einen Intent-Filter, um die Fähigkeit Ihrer App, diese Aktion auszuführen, mit den Informationen im folgenden Abschnitt zu bewerben.
Notiz erstellen
Verwenden Sie die Aktion
ACTION_CREATE_NOTE
, um eine neue Notiz zu erstellen. Geben Sie mit den folgenden Extras Notizdetails wie Betreff und Text an.
Hinweis:Apps müssen den Nutzer um Bestätigung bitten, bevor diese Aktion ausgeführt wird.
- Aktion
-
ACTION_CREATE_NOTE
- Data-URI-Schema
- Keine
- MIME-Typ
-
PLAIN_TEXT_TYPE
- "*/*"
- Extras
-
-
EXTRA_NAME
- Ein String, der den Titel oder das Thema der Notiz angibt.
-
EXTRA_TEXT
- Ein String, der den Text der Notiz angibt.
-
- Aktion
-
ACTION_DIAL
: Öffnet die Telefon App.ACTION_CALL
– Startet einen Anruf (erfordert die BerechtigungCALL_PHONE
)
- Data-URI-Schema
-
tel:<phone-number>
voicemail:<phone-number>
- MIME-Typ
- Keine
tel:2125551212
tel:(212) 555 1212
- Aktion
-
"com.google.android.gms.actions.SEARCH_ACTION"
- Suchanfragen aus Google Voice Actions unterstützen.
- Extras
-
QUERY
- Ein String, der die Suchanfrage enthält.
- Aktion
ACTION_WEB_SEARCH
- Data-URI-Schema
- Keine
- MIME-Typ
- Keine
- Extras
-
SearchManager.QUERY
- Der Suchstring.
- Aktion
-
ACTION_SETTINGS
ACTION_WIRELESS_SETTINGS
ACTION_AIRPLANE_MODE_SETTINGS
ACTION_WIFI_SETTINGS
ACTION_APN_SETTINGS
ACTION_BLUETOOTH_SETTINGS
ACTION_DATE_SETTINGS
ACTION_LOCALE_SETTINGS
ACTION_INPUT_METHOD_SETTINGS
ACTION_DISPLAY_SETTINGS
ACTION_SECURITY_SETTINGS
ACTION_LOCATION_SOURCE_SETTINGS
ACTION_INTERNAL_STORAGE_SETTINGS
ACTION_MEMORY_CARD_SETTINGS
Weitere verfügbare Einstellungsbildschirme finden Sie in der
Settings
-Dokumentation . - Data-URI-Schema
- Keine
- MIME-Typ
- Keine
- Aktion
ACTION_SENDTO
oder
ACTION_SEND
oder
ACTION_SEND_MULTIPLE
- Data-URI-Schema
-
sms:<phone_number>
smsto:<phone_number>
mms:<phone_number>
mmsto:<phone_number>
Diese Schemas werden alle gleich behandelt.
- MIME-Typ
-
"text/plain"
"image/*"
"video/*"
- Extras
-
"subject"
- Ein String für den Betreff der Nachricht (in der Regel nur für MMS).
"sms_body"
- Ein String für die SMS.
EXTRA_STREAM
- Ein
Uri
, das auf das anzuhängende Bild oder Video zeigt. Wenn Sie die AktionACTION_SEND_MULTIPLE
verwenden, ist dieser Extra einArrayList
vonUri
-Objekten, die auf die anzuhängenden Bilder oder Videos verweisen.
- Aktion
ACTION_VIEW
- Data-URI-Schema
http:<URL>
https:<URL>
- MIME-Typ
-
"text/plain"
"text/html"
"application/xhtml+xml"
"application/vnd.wap.xhtml+xml"
- Richten Sie ein Android-Gerät für die Entwicklung ein oder verwenden Sie ein virtuelles Gerät.
- Installieren Sie eine Version Ihrer App, die die Intents verarbeitet, die Sie unterstützen möchten.
- Intent mit
adb
auslösen:adb shell am start -a <ACTION> -t <MIME_TYPE> -d <DATA> \ -e <EXTRA_NAME> <EXTRA_VALUE> -n <ACTIVITY>
Beispiel:
adb shell am start -a android.intent.action.DIAL \ -d tel:555-5555 -n org.example.MyApp/.MyActivity
- Wenn Sie die erforderlichen Intent-Filter definieren, verarbeiten Sie den Intent.
Beispiel für Intention:
Kotlin
fun createNote(subject: String, text: String) { val intent = Intent(NoteIntents.ACTION_CREATE_NOTE).apply { putExtra(NoteIntents.EXTRA_NAME, subject) putExtra(NoteIntents.EXTRA_TEXT, text) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void createNote(String subject, String text) { Intent intent = new Intent(NoteIntents.ACTION_CREATE_NOTE) .putExtra(NoteIntents.EXTRA_NAME, subject) .putExtra(NoteIntents.EXTRA_TEXT, text); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Beispiel für Intent-Filter:
<activity ...> <intent-filter> <action android:name="com.google.android.gms.actions.CREATE_NOTE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="*/*" /> </intent-filter> </activity>
Smartphone
Das Starten eines Anrufs ist eine häufige Aktion für Telefon-Apps. Erstellen Sie einen Intent-Filter, um die Fähigkeit Ihrer App, diese Aktion auszuführen, mithilfe der Informationen im folgenden Abschnitt zu bewerben.
Anruf starten
Wenn Sie die Telefon App öffnen und eine Telefonnummer wählen möchten, verwenden Sie die Aktion ACTION_DIAL
und geben Sie eine Telefonnummer mit dem folgenden URI-Schema an. Wenn die Telefon App geöffnet wird, wird die Telefonnummer angezeigt. Der Nutzer muss auf die Schaltfläche Anrufen tippen, um den Anruf zu starten.
Wenn Sie einen Anruf direkt starten möchten, verwenden Sie die Aktion ACTION_CALL
und geben Sie eine Telefonnummer mit dem folgenden URI-Schema an. Wenn die Telefon App geöffnet wird, wird der Anruf gestartet. Der Nutzer muss nicht auf die Schaltfläche Anrufen tippen.
Für die Aktion ACTION_CALL
müssen Sie die Berechtigung CALL_PHONE
in Ihre Manifestdatei einfügen:
<uses-permission android:name="android.permission.CALL_PHONE" />
Gültige Telefonnummern sind diejenigen, die im IETF RFC 3966 definiert sind. Gültige Beispiele:
Der Dialer der Telefon App normalisiert Schemas wie Telefonnummern. Das beschriebene Schema ist also in der Uri.parse()
-Methode nicht unbedingt erforderlich.
Wenn Sie jedoch noch kein Schema ausprobiert haben oder sich nicht sicher sind, ob es verarbeitet werden kann, verwenden Sie stattdessen die Methode Uri.fromParts()
.
Beispiel für Intention:
Kotlin
fun dialPhoneNumber(phoneNumber: String) { val intent = Intent(Intent.ACTION_DIAL).apply { data = Uri.parse("tel:$phoneNumber") } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void dialPhoneNumber(String phoneNumber) { Intent intent = new Intent(Intent.ACTION_DIAL); intent.setData(Uri.parse("tel:" + phoneNumber)); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Suchen
Im Folgenden finden Sie häufige Aktionen für Such-Apps sowie die Informationen, die Sie zum Erstellen eines Intent-Filters benötigen, um die Fähigkeit Ihrer App zu bewerben, die jeweilige Aktion auszuführen.
Mit einer bestimmten App suchen
Wenn Sie die Suche im Kontext Ihrer App unterstützen möchten, deklarieren Sie in Ihrer App einen Intent-Filter mit der Aktion SEARCH_ACTION
, wie im folgenden Beispiel für einen Intent-Filter gezeigt.
Hinweis:Wir empfehlen nicht, SEARCH_ACTION
für die App-Suche zu verwenden.
Implementieren Sie stattdessen die Aktion GET_THING
, um die integrierte Unterstützung von Google Assistant für die In-App-Suche zu nutzen. Weitere Informationen finden Sie in der Google Assistant-Dokumentation zu App Actions.
Beispiel für Intent-Filter:
<activity android:name=".SearchActivity"> <intent-filter> <action android:name="com.google.android.gms.actions.SEARCH_ACTION"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>
Websuche durchführen
Verwenden Sie die Aktion ACTION_WEB_SEARCH
, um eine Websuche zu starten, und geben Sie den Suchstring im Extra SearchManager.QUERY
an.
Beispiel für Intention:
Kotlin
fun searchWeb(query: String) { val intent = Intent(Intent.ACTION_WEB_SEARCH).apply { putExtra(SearchManager.QUERY, query) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void searchWeb(String query) { Intent intent = new Intent(Intent.ACTION_WEB_SEARCH); intent.putExtra(SearchManager.QUERY, query); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Einstellungen
Wenn Ihre App den Nutzer auffordert, etwas zu ändern, können Sie einen Bildschirm in den Systemeinstellungen öffnen, indem Sie eine der folgenden Intent-Aktionen verwenden:
Beispiel für Intention:
Kotlin
fun openWifiSettings() { val intent = Intent(Settings.ACTION_WIFI_SETTINGS) if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void openWifiSettings() { Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
SMS
Das Verfassen einer SMS/MMS mit einem Anhang ist eine häufige Aktion für Messaging-Apps. Erstellen Sie einen Intent-Filter, um die Fähigkeit Ihrer App, diese Aktion auszuführen, mithilfe der Informationen im folgenden Abschnitt zu bewerben.
SMS/MMS mit Anhang verfassen
Verwenden Sie eine der folgenden Intent-Aktionen, um eine SMS oder MMS zu starten, und geben Sie Nachrichtendetails wie Telefonnummer, Betreff und Nachrichtentext mit den folgenden zusätzlichen Schlüsseln an.
Beispiel für Intention:
Kotlin
fun composeMmsMessage(message: String, attachment: Uri) { val intent = Intent(Intent.ACTION_SENDTO).apply { type = HTTP.PLAIN_TEXT_TYPE putExtra("sms_body", message) putExtra(Intent.EXTRA_STREAM, attachment) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void composeMmsMessage(String message, Uri attachment) { Intent intent = new Intent(Intent.ACTION_SENDTO); intent.setType(HTTP.PLAIN_TEXT_TYPE); intent.putExtra("sms_body", message); intent.putExtra(Intent.EXTRA_STREAM, attachment); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Wenn Sie dafür sorgen möchten, dass Ihr Intent nur von einer SMS-App und nicht von anderen E-Mail- oder Social-Media-Apps verarbeitet wird, verwenden Sie die Aktion ACTION_SENDTO
und das Datenschema "smsto:"
, wie im folgenden Beispiel gezeigt:
Kotlin
fun composeMmsMessage(message: String, attachment: Uri) { val intent = Intent(Intent.ACTION_SEND).apply { data = Uri.parse("smsto:") // Only SMS apps respond to this. putExtra("sms_body", message) putExtra(Intent.EXTRA_STREAM, attachment) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void composeMmsMessage(String message, Uri attachment) { Intent intent = new Intent(Intent.ACTION_SEND); intent.setData(Uri.parse("smsto:")); // Only SMS apps respond to this. intent.putExtra("sms_body", message); intent.putExtra(Intent.EXTRA_STREAM, attachment); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Beispiel für Intent-Filter:
<activity ...> <intent-filter> <action android:name="android.intent.action.SEND" /> <data android:type="text/plain" /> <data android:type="image/*" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Hinweis:Wenn Sie eine SMS-/MMS-Messaging-App entwickeln, müssen Sie Intent-Filter für mehrere zusätzliche Aktionen implementieren, damit sie unter Android 4.4 und höher als Standard-SMS-App verfügbar ist. Weitere Informationen finden Sie in der Dokumentation unter Telephony
.
Webbrowser
Das Laden einer Web-URL ist eine gängige Aktion für Webbrowser-Apps. Erstellen Sie einen Intent-Filter, um die Fähigkeit Ihrer App, diese Aktion auszuführen, mithilfe der Informationen im folgenden Abschnitt zu bewerben.
Web-URL laden
Verwenden Sie die Aktion ACTION_VIEW
, um eine Webseite zu öffnen, und geben Sie die Web-URL in den Intent-Daten an.
Beispiel für Intention:
Kotlin
fun openWebPage(url: String) { val webpage: Uri = Uri.parse(url) val intent = Intent(Intent.ACTION_VIEW, webpage) if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void openWebPage(String url) { Uri webpage = Uri.parse(url); Intent intent = new Intent(Intent.ACTION_VIEW, webpage); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Beispiel für Intent-Filter:
<activity ...> <intent-filter> <action android:name="android.intent.action.VIEW" /> <!-- Include the host attribute if you want your app to respond only to URLs with your app's domain. --> <data android:scheme="http" android:host="www.example.com" /> <category android:name="android.intent.category.DEFAULT" /> <!-- The BROWSABLE category is required to get links from web pages. --> <category android:name="android.intent.category.BROWSABLE" /> </intent-filter> </activity>
Tipp:Wenn Ihre Android-App ähnliche Funktionen wie Ihre Website bietet, fügen Sie einen Intent-Filter für URLs hinzu, die auf Ihre Website verweisen. Wenn Nutzer Ihre App installiert haben, werden Links aus E-Mails oder anderen Webseiten, die auf Ihre Website verweisen, in Ihrer Android-App statt auf Ihrer Webseite geöffnet. Weitere Informationen zum Umgang mit Links zu Android-Apps
Ab Android 12 (API‑Level 31) wird ein allgemeiner Web-Intent nur dann zu einer Aktivität in Ihrer App aufgelöst, wenn Ihre App für die spezifische Domain genehmigt ist, die in diesem Web-Intent enthalten ist. Wenn Ihre App nicht für die Domain genehmigt ist, wird der Web-Intent stattdessen in der Standardbrowser-App des Nutzers aufgelöst.
Intents mit der Android Debug Bridge überprüfen
Mit dem Tool adb
können Sie prüfen, ob Ihre App auf die Intents reagiert, die Sie unterstützen möchten. Gehen Sie dazu so vor:
Weitere Informationen finden Sie unter Shell-Befehle ausführen.