Mit einem Intent können Sie eine Aktivität in einer anderen App starten. Dazu beschreiben Sie in einem Intent
-Objekt eine Aktion, die ausgeführt werden soll, z. B. „Karte aufrufen“ oder „Foto aufnehmen“. Diese Art von Intent wird als impliziter Intent bezeichnet, da nicht die zu startende App-Komponente angegeben wird, sondern stattdessen eine Aktion und einige Daten, mit denen die Aktion ausgeführt werden soll.
Wenn Sie startActivity()
oder startActivityForResult()
aufrufen und eine implizite Absicht übergeben, löst das System die Absicht in einer App auf, die die Absicht verarbeiten kann, und startet die entsprechende Activity
. Wenn es mehr als eine App gibt, die die Absicht verarbeiten kann, wird dem Nutzer ein Dialogfeld angezeigt, in dem er auswählen kann, welche App verwendet werden soll.
Auf dieser Seite werden mehrere implizite Intents beschrieben, mit denen Sie gängige Aktionen ausführen können. Sie sind nach der Art der App sortiert, die den Intent verarbeitet. In jedem Abschnitt wird auch gezeigt, wie Sie einen Intent-Filter erstellen, um die Fähigkeit Ihrer App zur Ausführung der Aktion zu bewerben.
Achtung:Wenn sich auf dem Gerät keine Apps befinden, die eine implizite Absicht empfangen können, stürzt eine App ab, wenn sie startActivity()
aufruft. Um zuerst zu prüfen, ob eine App vorhanden ist, die die Intent empfangen kann, rufen Sie resolveActivity()
auf Ihrem Intent
-Objekt auf. Wenn das Ergebnis nicht null ist, gibt es mindestens eine App, die die Intent verarbeiten kann, und startActivity()
kann sicher aufgerufen werden. Wenn das Ergebnis null ist, verwenden Sie den Intent nicht und deaktivieren Sie nach Möglichkeit die Funktion, die den Intent aufruft.
Wenn Sie nicht wissen, wie Sie Intents oder Intent-Filter erstellen, lesen Sie zuerst den Hilfeartikel Intents und Intent-Filter.
Informationen zum Auslösen der auf dieser Seite aufgeführten Intents über Ihren Entwicklungshost finden Sie im Abschnitt Intents mit der Android Debug Bridge überprüfen.
Google Voice Actions
Google Voice Actions löst einige der auf dieser Seite aufgeführten Intents als Reaktion auf Sprachbefehle aus. Weitere Informationen finden Sie unter Erste Schritte mit Sprachaktionen des Systems.
Wecker
Im Folgenden finden Sie gängige Aktionen für Wecker-Apps. Außerdem sind die Informationen aufgeführt, die Sie zum Erstellen eines Intent-Filters benötigen, um die Fähigkeit Ihrer App zur Ausführung der einzelnen Aktionen zu bewerben.
Wecker stellen
Wenn Sie einen neuen Wecker erstellen möchten, verwenden Sie die Aktion ACTION_SET_ALARM
und geben Sie mit den folgenden Extras Weckerdetails wie Uhrzeit und Nachricht an.
Hinweis:Unter Android 2.3 (API-Level 9) und niedriger sind nur die Stunde, die Minuten und die Nachrichten-Extras 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 des Weckers.
EXTRA_MINUTES
- Die Minuten für den Wecker.
EXTRA_MESSAGE
- Eine benutzerdefinierte Nachricht zur Identifizierung des Weckers.
EXTRA_DAYS
- Ein
ArrayList
, das jeden Wochentag enthält, an dem dieser Wecker wiederholt wird. Jeder Tag muss mit einer Ganzzahl aus der KlasseCalendar
deklariert werden, z. B.MONDAY
.Geben Sie diese Option für einen einmaligen Wecker nicht an.
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 beim Einstellen des Weckers ihre Benutzeroberfläche überspringen muss. Wenn „wahr“ festgelegt ist, muss die App alle Bestätigungs-UIs überspringen und den angegebenen Wecker stellen.
Beispiel für eine Absicht:
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); } }
Damit die ACTION_SET_ALARM
-Intent aufgerufen werden kann, muss Ihre App die Berechtigung SET_ALARM
haben:
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
Beispiel für einen 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 die Aktion ACTION_SET_TIMER
, um einen Countdown-Timer zu erstellen, und gib mit den folgenden Extras Details wie die Dauer an.
Hinweis:Dieser Intent ist ab Android 4.4 (API-Ebene 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 beim Einstellen des Timers ihre Benutzeroberfläche überspringen muss. Wenn „wahr“ festgelegt ist, muss die App alle Bestätigungsoberflächen umgehen und den angegebenen Timer starten.
Beispiel für eine Absicht:
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); } }
Damit die ACTION_SET_TIMER
-Intent aufgerufen werden kann, muss Ihre App die Berechtigung SET_ALARM
haben:
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
Beispiel für einen 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 Wecker aufzurufen.
Dieser Intent wird von nicht vielen Apps aufgerufen, da er hauptsächlich von System-Apps verwendet wird. Jede App, die sich wie ein Wecker verhält, kann diesen Intent-Filter implementieren und als Reaktion die Liste der aktuellen Wecker anzeigen.
Hinweis:Dieser Intent ist ab Android 4.4 (API-Ebene 19) verfügbar.
- Aktion
ACTION_SHOW_ALARMS
- Daten-URI
- Keine
- MIME-Typ
- Keine
Beispiel für einen 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 gängige Aktion für Kalender-Apps. Erstellen Sie einen Intent-Filter, um die Fähigkeit Ihrer App zur Ausführung dieser Aktion zu bewerben. Verwenden Sie dazu die Informationen im folgenden Abschnitt.
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 in Millisekunden seit der Epoche.
EXTRA_EVENT_END_TIME
- Die Endzeit des Ereignisses in Millisekunden seit der Epoche.
TITLE
- Der Titel der Veranstaltung.
DESCRIPTION
- Die Ereignisbeschreibung.
EVENT_LOCATION
- Der Veranstaltungsort.
EXTRA_EMAIL
- Eine durch Kommas getrennte Liste der E-Mail-Adressen der eingeladenen Personen.
Mithilfe der in der
CalendarContract.EventsColumns
-Klasse definierten Konstanten können viele weitere Ereignisdetails angegeben werden.
Beispiel für eine Absicht:
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 einen 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 gängige Aktionen für Kamera-Apps. Außerdem sind die Informationen aufgeführt, die Sie zum Erstellen eines Intent-Filters benötigen, um die Fähigkeit Ihrer App zur Ausführung der einzelnen Aktionen zu bewerben.
Fotos oder Videos aufnehmen und zurückgeben
Wenn Sie eine Kamera-App öffnen und das aufgenommene Foto oder Video erhalten möchten, verwenden Sie die Aktion ACTION_IMAGE_CAPTURE
oder ACTION_VIDEO_CAPTURE
. Geben Sie auch den URI-Speicherort an, an dem die Kamera das Foto oder Video speichern soll, in EXTRA_OUTPUT
extra.
- Aktion
ACTION_IMAGE_CAPTURE
oder
ACTION_VIDEO_CAPTURE
- Data URI Scheme
- 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 wieder auf Ihre Aktivität richtet, d. h. Ihre App den onActivityResult()
-Callback empfängt, können Sie über den URI, den Sie mit dem Wert EXTRA_OUTPUT
angegeben haben, auf das Foto oder Video zugreifen.
Hinweis:Wenn Sie ein Foto mit ACTION_IMAGE_CAPTURE
aufnehmen, gibt die Kamera möglicherweise auch eine verkleinerte Kopie oder ein Thumbnail des Fotos im Ergebnis Intent
zurück, das als Bitmap
in einem zusätzlichen Feld namens "data"
gespeichert wird.
Beispiel für eine Absicht:
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. ... } }
Wie Sie das für Android 12 (API-Level 31) oder höher tun, wird im folgenden Beispiel für Intents veranschaulicht.
Beispiel für eine Absicht:
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 dazu, wie Sie mit diesem Intent ein Foto aufnehmen, einschließlich der Erstellung einer geeigneten Uri
für den Ausgabeort, finden Sie unter Fotos aufnehmen oder Videos aufnehmen.
Beispiel für einen Intent-Filter:
<activity ...> <intent-filter> <action android:name="android.media.action.IMAGE_CAPTURE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Prüfen Sie bei der Verarbeitung dieser Absicht in Ihrer Aktivität, ob das EXTRA_OUTPUT
-Extra in der eingehenden Intent
vorhanden ist. Speichern Sie dann das aufgenommene Bild oder Video an dem vom Extra angegebenen Speicherort und rufen Sie setResult()
mit einem Intent
auf, das ein komprimiertes Thumbnail in einem Extra namens "data"
enthält.
Kamera-App im Modus „Standbild“ starten
Wenn Sie eine Kamera-App im Modus für Standbilder öffnen möchten, verwenden Sie die Aktion INTENT_ACTION_STILL_IMAGE_CAMERA
.
- Aktion
INTENT_ACTION_STILL_IMAGE_CAMERA
- Data URI Scheme
- Keine
- MIME-Typ
- Keine
- Extras
- Keine
Beispiel für eine Absicht:
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 einen 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
Verwenden Sie die Aktion INTENT_ACTION_VIDEO_CAMERA
, um eine Kamera-App im Videomodus zu öffnen.
- Aktion
INTENT_ACTION_VIDEO_CAMERA
- Data URI Scheme
- Keine
- MIME-Typ
- Keine
- Extras
- Keine
Beispiel für eine Absicht:
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 einen 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 gängige Aktionen für Apps zur Kontaktverwaltung. Außerdem sind die Informationen aufgeführt, die Sie zum Erstellen eines Intent-Filters benötigen, um die Möglichkeit Ihrer App zur Ausführung der einzelnen Aktionen zu bewerben.
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. In der Antwort werden Ihrer App vorübergehende Berechtigungen zum Lesen dieses Kontakts über die Contacts Provider API gewährt, 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öchten, lesen Sie stattdessen den nächsten Abschnitt, in dem beschrieben wird, wie Sie bestimmte Kontaktdaten auswählen.
- Aktion
ACTION_PICK
- Data URI Scheme
- Keine
- MIME-Typ
Contacts.CONTENT_TYPE
Beispiel für eine Absicht:
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 Kontaktdaten, wenn 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 Stern markiert ist. Wenn Sie jedoch genauere Daten zu einem bestimmten Kontakt lesen möchten, z. B. seine Telefonnummer oder E-Mail-Adresse, benötigen Sie die Berechtigung READ_CONTACTS
.
Bestimmte Kontaktdaten auswählen
Wenn der Nutzer eine bestimmte Information 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 einzusehen.
Wenn Sie nur einen Datentyp von einem Kontakt abrufen müssen, ist diese Methode mit einer CONTENT_TYPE
aus den ContactsContract.CommonDataKinds
-Klassen effizienter als die Verwendung der 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 an den Anbieter von Kontaktdaten senden müssen.
Das Ergebnis Intent
, das an Ihren onActivityResult()
-Callback gesendet wird, enthält den URI content:
, der auf die ausgewählten Kontaktdaten verweist. In der Antwort werden Ihrer App vorübergehende Berechtigungen zum Lesen dieser Kontaktdaten gewährt, auch wenn Ihre App die Berechtigung READ_CONTACTS
nicht enthält.
- Aktion
ACTION_PICK
- Data URI Scheme
- Keine
- MIME-Typ
-
CommonDataKinds.Phone.CONTENT_TYPE
- Wählen Sie einen Kontakt mit einer Telefonnummer aus.
CommonDataKinds.Email.CONTENT_TYPE
- Wählen Sie einen Kontakt mit einer E-Mail-Adresse aus.
CommonDataKinds.StructuredPostal.CONTENT_TYPE
- Wählen Sie einen Kontakt mit einer Postadresse aus.
Oder einen der vielen anderen
CONTENT_TYPE
-Werte unterContactsContract
.
Beispiel für eine Absicht:
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. //... } } }
Kontakt ansehen
Wenn Sie die Details für einen bekannten Kontakt anzeigen möchten, verwenden Sie die Aktion ACTION_VIEW
und geben Sie den Kontakt mit einem content:
-URI als Intent-Daten an.
Es gibt zwei Möglichkeiten, den URI des Kontakts zu ermitteln:
- Verwenden Sie den Kontakt-URI, der von der
ACTION_PICK
-Aktion zurückgegeben wurde, die im vorherigen Abschnitt gezeigt wurde. Für diesen Ansatz sind keine App-Berechtigungen erforderlich. - Rufen Sie die Liste aller Kontakte direkt auf, wie unter Liste mit Kontakten abrufen beschrieben. Für diesen Ansatz ist die Berechtigung
READ_CONTACTS
erforderlich.
- Aktion
ACTION_VIEW
- Data URI Scheme
content:<URI>
- MIME-Typ
- Keine. Der Typ wird aus der Kontakt-URI abgeleitet.
Beispiel für eine Absicht:
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 sind.
Es gibt zwei Möglichkeiten, den Kontakt-URI zu initialisieren:
- Verwenden Sie den Kontakt-URI, der von der
ACTION_PICK
-Aktion zurückgegeben wurde, die im vorherigen Abschnitt gezeigt wurde. Für diesen Ansatz sind keine App-Berechtigungen erforderlich. - Rufen Sie die Liste aller Kontakte direkt auf, wie unter Liste mit Kontakten abrufen beschrieben. Für diesen Ansatz ist die Berechtigung
READ_CONTACTS
erforderlich.
- Aktion
ACTION_EDIT
- Data URI Scheme
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 eine Absicht:
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 von Kontakten finden Sie unter Kontakte mithilfe von Intents ändern.
Kontakt einfügen
Wenn Sie einen neuen Kontakt einfügen möchten, verwenden Sie die Aktion ACTION_INSERT
, geben Sie Contacts.CONTENT_TYPE
als MIME-Typ an und fügen Sie alle bekannten Kontaktdaten in Extras ein, die durch Konstanten in ContactsContract.Intents.Insert
angegeben sind.
- Aktion
ACTION_INSERT
- Data URI Scheme
- Keine
- MIME-Typ
Contacts.CONTENT_TYPE
- Extras
- Eines oder mehrere der in
ContactsContract.Intents.Insert
definierten Extras.
Beispiel für eine Absicht:
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 Kontaktdaten mithilfe von 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 zur Ausführung dieser Aktion zu bewerben. Verwenden Sie dazu die Informationen im folgenden Abschnitt.
E-Mail mit optionalen Anhängen verfassen
Verwenden Sie zum Verfassen einer E-Mail einen der folgenden Befehle, je nachdem, ob Sie Anhänge hinzufügen möchten. Geben Sie dann mithilfe der aufgeführten zusätzlichen Schlüssel E-Mail-Details wie den Empfänger und den Betreff an.
- Aktion
ACTION_SENDTO
(kein Anhang) oder
ACTION_SEND
(ein Anhang) oder
ACTION_SEND_MULTIPLE
(mehrere Anhänge)- Data URI Scheme
- Keine
- MIME-Typ
-
"text/plain"
"*/*"
- Extras
-
Intent.EXTRA_EMAIL
- Ein String-Array aller E-Mail-Adressen der Empfänger.
Intent.EXTRA_CC
- Ein String-Array aller E-Mail-Adressen der Cc-Empfänger.
Intent.EXTRA_BCC
- Ein String-Array aller E-Mail-Adressen der Bcc-Empfänger.
Intent.EXTRA_SUBJECT
- Ein String mit dem Betreff der E-Mail.
Intent.EXTRA_TEXT
- Ein String mit dem Text der E-Mail.
Intent.EXTRA_STREAM
- Ein
Uri
, der auf den Anhang verweist. Bei Verwendung der AktionACTION_SEND_MULTIPLE
ist dies stattdessen einArrayList
mit mehrerenUri
-Objekten.
Beispiel für eine Absicht:
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 sicherstellen möchten, dass Ihre Intent-Anfrage nur von einer E-Mail-App und nicht von einer Messaging- oder Social-Media-App verarbeitet wird, verwenden Sie die Aktion ACTION_SENDTO
und fügen Sie das Datenschema "mailto:"
hinzu, 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 einen 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 gängige Aktionen für Dateispeicher-Apps. Außerdem finden Sie Informationen dazu, welche Informationen Sie benötigen, um einen Intent-Filter zu erstellen, um die Fähigkeit Ihrer App zur Ausführung der einzelnen Aktionen zu bewerben.
Bestimmten Dateityp abrufen
Wenn Sie den Nutzer auffordern möchten, eine Datei wie ein Dokument oder Foto auszuwählen und eine Referenz an Ihre App zurückzugeben, verwenden Sie die Aktion ACTION_GET_CONTENT
und geben Sie den gewünschten MIME-Typ an. Der Dateiverknüpfung, die an Ihre App zurückgegeben wird, liegt der aktuelle Lebenszyklus Ihrer Aktivität zugrunde. Wenn Sie später darauf zugreifen möchten, müssen Sie eine Kopie importieren, die Sie später lesen können.
Mit dieser Intent-Definition 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 an Ihre onActivityResult()
-Methode gesendete Ergebnis-Intent 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 auswählbare Dateien jedoch auf solche beschränken möchten, auf die über einen Inhaltsanbieter (einen content:
-URI) zugegriffen werden kann und die als Dateistream mit openFileDescriptor()
verfügbar sind, fügen Sie Ihrer Intent-Definition 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, indem Sie der Intent-Anfrage EXTRA_ALLOW_MULTIPLE
hinzufügen und auf true
festlegen.
Sie können dann in einem von getClipData()
zurückgegebenen ClipData
-Objekt auf jede der ausgewählten Dateien zugreifen.
- Aktion
ACTION_GET_CONTENT
- Data URI Scheme
- Keine
- MIME-Typ
- Der MIME-Typ, der dem Dateityp entspricht, den der Nutzer auswählen muss.
- Extras
-
EXTRA_ALLOW_MULTIPLE
- Boolescher Wert, der angibt, ob der Nutzer mehrere Dateien gleichzeitig auswählen kann.
EXTRA_LOCAL_ONLY
- Ein boolescher Wert, der angibt, ob die zurückgegebene Datei direkt vom Gerät verfügbar sein muss, anstatt dass ein Download von einem Remote-Dienst erforderlich ist.
- Category (optional)
-
CATEGORY_OPENABLE
- Damit werden nur „öffnebare“ Dateien zurückgegeben, die mit
openFileDescriptor()
als Dateistream dargestellt werden können.
Beispiel für eine Absicht, ein Foto aufzunehmen:
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 einen Intent-Filter, um ein Foto zurückzugeben:
<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 mit der Aktion ACTION_GET_CONTENT
eine Kopie einer Datei abzurufen, die Sie in Ihre App importieren müssen, können Sie unter Android 4.4 oder höher mit der Aktion ACTION_OPEN_DOCUMENT
und Angabe eines MIME-Typs das Öffnen einer Datei anfordern, die von einer anderen App verwaltet wird.
Wenn der Nutzer auch ein neues Dokument erstellen soll, in das Ihre App schreiben kann, verwenden Sie stattdessen die Aktion ACTION_CREATE_DOCUMENT
.
Anstatt beispielsweise aus vorhandenen PDF-Dokumenten auszuwählen, können Nutzer mit der ACTION_CREATE_DOCUMENT
-Intent auswählen, wo sie ein neues Dokument erstellen möchten, z. B. in einer anderen App, die den Speicher des Dokuments verwaltet. Ihre App erhält dann den URI-Speicherort, an dem das neue Dokument geschrieben werden kann.
Während der Intent, der über die Aktion ACTION_GET_CONTENT
an Ihre onActivityResult()
-Methode gesendet wird, einen beliebigen URI zurückgeben kann, wird in der Ergebnisabsicht von ACTION_OPEN_DOCUMENT
und ACTION_CREATE_DOCUMENT
immer die ausgewählte Datei als content:
-URI angegeben, der von einem DocumentsProvider
unterstützt wird. Sie können die Datei mit openFileDescriptor()
öffnen und die Details mithilfe von 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 an ihrem Speicherort öffnen und bearbeiten möchten.
Sie können den Nutzern auch die Möglichkeit geben, mehrere Dateien auszuwählen. Fügen Sie dazu der Intent-Definition die Variable EXTRA_ALLOW_MULTIPLE
hinzu und legen Sie als Wert true
fest.
Wenn der Nutzer nur einen Artikel auswählt, können Sie ihn aus getData()
abrufen.
Wenn der Nutzer mehr als einen Artikel auswählt, gibt getData()
„null“ zurück. Du musst stattdessen jeden Artikel aus einem ClipData
-Objekt abrufen, das von getClipData()
zurückgegeben wird.
Hinweis:Für Ihre Intent-Definition muss ein MIME-Typ angegeben und muss die Kategorie CATEGORY_OPENABLE
deklariert werden. Falls erforderlich, können Sie mehrere MIME-Typen angeben, indem Sie ein Array von MIME-Typen mit dem zusätzlichen 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 Scheme
- 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 von Ihrer App angefordert werden. Wenn Sie dieses Extra verwenden, müssen Sie den primären MIME-Typ in
setType()
auf"*/*"
festlegen. EXTRA_ALLOW_MULTIPLE
- Boolescher Wert, der angibt, ob der Nutzer mehrere Dateien gleichzeitig auswählen kann.
EXTRA_TITLE
- , um mit
ACTION_CREATE_DOCUMENT
einen ersten Dateinamen anzugeben. EXTRA_LOCAL_ONLY
- Ein boolescher Wert, der angibt, ob die zurückgegebene Datei direkt vom Gerät verfügbar sein muss, anstatt dass ein Download von einem Remote-Dienst erforderlich ist.
- Category
-
CATEGORY_OPENABLE
- Damit werden nur „öffnebare“ Dateien zurückgegeben, die mit
openFileDescriptor()
als Dateistream dargestellt werden können.
Beispiel für eine Absicht, ein Foto aufzunehmen:
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 eine Absicht reagieren. Stattdessen empfängt das System diese Absicht und zeigt alle Dateien an, die in verschiedenen Apps verfügbar sind, in einer einheitlichen Benutzeroberfläche an.
Wenn Sie die Dateien Ihrer App in dieser Benutzeroberfläche bereitstellen und von anderen Apps öffnen lassen möchten, müssen Sie einen DocumentsProvider
implementieren und einen Intent-Filter für PROVIDER_INTERFACE
("android.content.action.DOCUMENTS_PROVIDER"
) einschließen, 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 dafür sorgen, dass die von Ihrer App verwalteten Dateien auch in anderen Apps geöffnet werden können, finden Sie unter Dateien mithilfe des Storage Access Framework öffnen.
Lokale Aktionen
Das Anfordern eines Autos ist eine gängige lokale Aktion. Erstellen Sie einen Intent-Filter, um die Fähigkeit Ihrer App zur Ausführung dieser Aktion zu bewerben. Verwenden Sie dazu die Informationen im folgenden Abschnitt.
Taxi rufen
Verwenden Sie die Aktion ACTION_RESERVE_TAXI_RESERVATION
, um ein Taxi zu rufen.
Hinweis:Apps müssen vor Abschluss dieser Aktion die Bestätigung des Nutzers einholen.
- Aktion
ACTION_RESERVE_TAXI_RESERVATION
- Daten-URI
- Keine
- MIME-Typ
- Keine
- Extras
- Keine
Beispiel für eine Absicht:
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 einen 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 Standorts auf einer Karte ist eine gängige Aktion für Karten-Apps. Erstellen Sie einen Intent-Filter, um die Fähigkeit Ihrer App zur Ausführung dieser Aktion zu bewerben. Verwenden Sie dazu die Informationen im folgenden Abschnitt.
Standort auf einer Karte anzeigen
Wenn Sie eine Karte öffnen möchten, verwenden Sie die Aktion ACTION_VIEW
und geben Sie die Standortinformationen in den Intent-Daten mit einem der folgenden Schemas an.
- Aktion
ACTION_VIEW
- Data URI Scheme
-
geo:latitude,longitude
- Die Karte wird am angegebenen Längen- und Breitengrad angezeigt.
Beispiel:
"geo:47.6,-122.3"
geo:latitude,longitude?z=zoom
- Die Karte wird bei einer bestimmten Zoomstufe und den angegebenen Längen- und Breitengraden angezeigt. Bei einer Zoomstufe von 1 wird die gesamte Erde mittig auf den angegebenen Koordinaten lat,lng zentriert dargestellt. Die höchste (nächste) Zoomstufe ist 23.
Beispiel:
"geo:47.6,-122.3?z=11"
geo:0,0?q=lat,lng(label)
- Die Karte wird mit einem Stringlabel am angegebenen Längen- und Breitengrad angezeigt.
Beispiel:
"geo:0,0?q=34.99,-106.61(Treasure)"
geo:0,0?q=my+street+address
- Standort für „meine Adresse“ anzeigen, wobei es sich um eine bestimmte Adresse oder eine Standortabfrage handeln kann.
Beispiel:
"geo:0,0?q=1600+Amphitheatre+Parkway%2C+CA"
Hinweis:Alle im
geo
-URI übergebenen Strings müssen codiert sein. Aus dem String1st & Pike, Seattle
wird beispielsweise1st%20%26%20Pike%2C%20Seattle
. Leerzeichen im String werden mit%20
codiert oder durch das Pluszeichen (+
) ersetzt.
- MIME-Typ
- Keine
Beispiel für eine Absicht:
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 einen 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. Außerdem sind die Informationen aufgeführt, die Sie zum Erstellen eines Intent-Filters benötigen, um die Möglichkeit Ihrer App zur Ausführung der einzelnen Aktionen zu bewerben.
Mediendatei abspielen
Wenn Sie eine Musikdatei abspielen möchten, verwenden Sie die Aktion ACTION_VIEW
und geben Sie den URI-Speicherort der Datei in den Intent-Daten an.
- Aktion
ACTION_VIEW
- Data URI Scheme
-
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 eine Absicht:
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 einen 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
Wenn Sie Musik basierend auf einer Suchanfrage abspielen möchten, verwenden Sie den INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH
-Intent. Eine App könnte diesen Intent als Reaktion auf den Sprachbefehl des Nutzers zum Abspielen von Musik auslösen. Die Empfänger-App für diese Absicht führt eine Suche in ihrem Inventar durch, um vorhandene Inhalte mit der angegebenen Suchanfrage abzugleichen, und startet die Wiedergabe dieser Inhalte.
Fügen Sie in diesen Intent den String EXTRA_MEDIA_FOCUS
ein, der den gewünschten Suchmodus angibt. So kann beispielsweise im Suchmodus angegeben werden, ob nach dem Namen eines Künstlers oder eines Songs gesucht werden soll.
- Aktion
INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH
- Data URI Scheme
- 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 Optionen erforderlich. Wenn sich der Nutzer beispielsweise für einen bestimmten Song interessiert, kann der Intent drei zusätzliche Extras haben: den Titel des Songs, den Künstler und das Album. Dieser Intent unterstützt für jeden Wert von
EXTRA_MEDIA_FOCUS
die folgenden Suchmodi:Beliebig –
"vnd.android.cursor.item/*"
-
Jede Art von Musik abspielen Die Empfänger-App spielt Musik basierend auf einer intelligenten Auswahl ab, z. B. die letzte Playlist, die der Nutzer gehört hat.
Zusätzliche Extras:
QUERY
(erforderlich): ein leerer String. Diese Option ist immer für die Abwärtskompatibilität verfügbar. Vorhandene Apps, die die Suchmodi nicht kennen, können diese Suchabsicht als unstrukturierte Suche verarbeiten.
Unstrukturiert –
"vnd.android.cursor.item/*"
-
Du kannst einen bestimmten Song, ein Album oder ein Genre über eine unstrukturierte Suchanfrage abspielen. Apps können mit diesem Suchmodus eine Suchanfrage generieren, wenn sie den Inhaltstyp nicht identifizieren können, den sich der Nutzer anhören möchte. Verwenden Sie nach Möglichkeit genauere Suchmodi.
Zusätzliche Extras:
QUERY
(erforderlich): Ein String, der eine beliebige Kombination aus Künstler, Album, Songtitel oder Genre enthält.
-
Musik eines bestimmten Genres abspielen
Zusätzliche Extras:
"android.intent.extra.genre"
(erforderlich): Das Genre.QUERY
(erforderlich): das Genre. Diese Option ist immer für die Abwärtskompatibilität verfügbar. Vorhandene Apps, die die Suchmodi nicht kennen, können diese Suchabsicht 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): den Künstler."android.intent.extra.genre"
: das Genre.QUERY
(erforderlich): Ein String, der eine beliebige Kombination aus Künstler oder Genre enthält. Diese Option ist immer für die Abwärtskompatibilität verfügbar. Vorhandene Apps, die die Suchmodi nicht kennen, können diese Suchabsicht 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 dem Album oder dem Künstler enthält. Dieses Extra ist immer für die Abwärtskompatibilität verfügbar. Vorhandene Apps, die die Suchmodi nicht kennen, können diese Suchabsicht 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 Titels.QUERY
(erforderlich): Ein String, der eine beliebige Kombination aus Album, Künstler, Genre oder Titel enthält. Diese Option ist immer für die Abwärtskompatibilität verfügbar. Vorhandene Apps, die die Suchmodi nicht kennen, können diese Suchabsicht 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 festgelegt wurden
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 Name des Songs, auf dem die Playlist basiert.QUERY
(erforderlich): Ein String, der eine beliebige Kombination aus Album, Künstler, Genre, Playlist oder Titel enthält. Diese Option ist immer für die Abwärtskompatibilität verfügbar. Vorhandene Apps, die die Suchmodi nicht kennen, können diese Suchabsicht als unstrukturierte Suche verarbeiten.
Beispiel für eine Absicht:
Wenn sich der Nutzer Musik von einem bestimmten Künstler anhören möchte, kann eine Such-App die folgende Absicht 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 einen 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 diese Absicht in Ihrer Aktivität verarbeiten, prüfen Sie den Wert des zusätzlichen EXTRA_MEDIA_FOCUS
-Elements in der eingehenden Intent
, um den Suchmodus zu bestimmen. Sobald der Suchmodus für Ihre Aktivität ermittelt wurde, können Sie die Werte der zusätzlichen Extras für diesen bestimmten Suchmodus ablesen.
Anhand dieser Informationen kann deine App dann im Inventar nach Inhalten suchen, die mit der Suchanfrage übereinstimmen. Das 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 gängige Aktion in Notiz-Apps. Erstellen Sie einen Intent-Filter, um die Fähigkeit Ihrer App zur Ausführung dieser Aktion zu bewerben. Verwenden Sie dazu die Informationen im folgenden Abschnitt.
Notiz erstellen
Verwenden Sie die Aktion
ACTION_CREATE_NOTE
, um eine neue Notiz zu erstellen, und geben Sie mithilfe der folgenden Extras Notizdetails wie Betreff und Text an.
Hinweis:Apps müssen vor Abschluss dieser Aktion die Bestätigung des Nutzers einholen.
- Aktion
-
ACTION_CREATE_NOTE
- Data URI Scheme
- 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 Scheme
-
tel:<phone-number>
voicemail:<phone-number>
- MIME-Typ
- Keine
tel:2125551212
tel:(212) 555 1212
- Aktion
-
"com.google.android.gms.actions.SEARCH_ACTION"
- Suchanfragen über Google Voice Actions unterstützen.
- Extras
-
QUERY
- Ein String, der die Suchanfrage enthält.
- Aktion
ACTION_WEB_SEARCH
- Data URI Scheme
- 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 Scheme
- Keine
- MIME-Typ
- Keine
- Aktion
ACTION_SENDTO
oder
ACTION_SEND
oder
ACTION_SEND_MULTIPLE
- Data URI Scheme
-
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 (normalerweise nur für MMS).
"sms_body"
- Ein String für die SMS.
EXTRA_STREAM
- Ein
Uri
, das auf das anzuhängende Bild oder Video verweist. Wenn Sie die AktionACTION_SEND_MULTIPLE
verwenden, ist dieses Extra einArrayList
vonUri
-Objekten, die auf die anzuhängenden Bilder oder Videos verweisen.
- Aktion
ACTION_VIEW
- Data URI Scheme
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 eine Absicht:
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 einen 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>
Telefon
Das Initiieren eines Anrufs ist eine gängige Aktion für Smartphone-Apps. Erstellen Sie einen Intent-Filter, um die Fähigkeit Ihrer App zur Ausführung dieser Aktion zu bewerben. Verwenden Sie dazu die Informationen im folgenden Abschnitt.
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 direkt einen Anruf 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, beginnt der Anruf. Der Nutzer muss nicht auf die Schaltfläche Anrufen tippen.
Für die Aktion ACTION_CALL
müssen Sie der Manifestdatei die Berechtigung CALL_PHONE
hinzufügen:
<uses-permission android:name="android.permission.CALL_PHONE" />
Gültige Telefonnummern sind solche, die in IETF RFC 3966 definiert sind. Beispiele:
Der Telefon-App-Wähler kann Schemata wie Telefonnummern gut normalisieren. Das beschriebene Schema ist also in der Uri.parse()
-Methode nicht unbedingt erforderlich.
Wenn Sie jedoch noch kein Schema ausprobiert haben oder nicht sicher sind, ob es verarbeitet werden kann, verwenden Sie stattdessen die Methode Uri.fromParts()
.
Beispiel für eine Absicht:
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. Außerdem sind die Informationen aufgeführt, die Sie zum Erstellen eines Intent-Filters benötigen, um die Möglichkeit Ihrer App zur Ausführung der einzelnen Aktionen zu bewerben.
Über eine bestimmte 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, SEARCH_ACTION
nicht 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 Dokumentation zu App-Aktionen von Google Assistant.
Beispiel für einen 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 ausfü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 eine Absicht:
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 der Nutzer in Ihrer App etwas ändern muss, können Sie einen Bildschirm in den Einstellungen öffnen. Verwenden Sie dazu eine der folgenden Intent-Aktionen:
Beispiel für eine Absicht:
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 gängige Aktion in Messaging-Apps. Erstellen Sie einen Intent-Filter, um die Fähigkeit Ihrer App zur Ausführung dieser Aktion zu bewerben. Verwenden Sie dazu die Informationen im folgenden Abschnitt.
SMS/MMS mit Anhang schreiben
Wenn Sie eine SMS oder MMS senden möchten, verwenden Sie eine der folgenden Intent-Aktionen und geben Sie mithilfe der folgenden zusätzlichen Schlüssel Details zur Nachricht wie Telefonnummer, Betreff und Textkörper an.
Beispiel für eine Absicht:
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 sicherstellen möchten, dass Ihre Intent-Anfrage nur von einer Messaging-App und nicht von anderen E-Mail- oder Social-Media-Apps verarbeitet wird, verwenden Sie die Aktion ACTION_SENDTO
und fügen Sie das Datenschema "smsto:"
hinzu, 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 einen 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 die App 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 zur Ausführung dieser Aktion zu bewerben. Verwenden Sie dazu die Informationen im folgenden Abschnitt.
Web-URL laden
Wenn Sie eine Webseite öffnen möchten, verwenden Sie die Aktion ACTION_VIEW
und geben Sie die Web-URL in den Intent-Daten an.
Beispiel für eine Absicht:
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 einen 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 von E-Mails oder anderen Webseiten, die auf Ihre Website verweisen, stattdessen in Ihrer Android-App geöffnet. Weitere Informationen finden Sie unter Umgang mit Android-App-Links.
Ab Android 12 (API-Level 31) wird ein generischer Web-Intent nur dann in eine Aktivität in Ihrer App aufgelöst, wenn Ihre App für die spezifische Domain in diesem Web-Intent genehmigt ist. Wenn Ihre App nicht für die Domain genehmigt ist, wird die Webabsicht stattdessen auf die Standardbrowser-App des Nutzers aufgelöst.
Intents mit der Android Debug Bridge überprüfen
Wenn Sie prüfen möchten, ob Ihre App auf die von Ihnen unterstützten Intents reagiert, können Sie mit dem Tool adb
bestimmte Intents auslösen. Gehen Sie dazu so vor:
Weitere Informationen finden Sie unter Shell-Befehle ausführen.