Mit einem Intent können Sie eine Aktivität in einer anderen App starten, indem Sie in einem Intent
-Objekt eine Aktion beschreiben, die Sie ausführen möchten, z. B. „Karte ansehen“ oder „Foto aufnehmen“. Diese Art von Intent wird als impliziter Intent bezeichnet, weil nicht die zu startende App-Komponente festgelegt ist, sondern eine Aktion definiert und bestimmte Daten zum Ausführen der Aktion zur Verfügung gestellt wird.
Wenn du startActivity()
oder startActivityForResult()
aufrufst und einen impliziten Intent übergibst, löst das System den Intent an eine App auf, die den Intent verarbeiten kann, und startet die entsprechende Activity
. Wenn mehr als eine App vorhanden ist, die den Intent verarbeiten kann, zeigt das System dem Nutzer ein Dialogfeld an, über das er die zu verwendende App auswählen kann.
Auf dieser Seite werden mehrere implizite Intents beschrieben, mit denen Sie gängige Aktionen ausführen können. Sie sind nach dem Anwendungstyp geordnet, der den Intent verarbeitet. In jedem Abschnitt wird auch gezeigt, wie Sie einen Intent-Filter erstellen können, um die Fähigkeit Ihrer App zum Ausführen der Aktion zu bewerben.
Achtung:Wenn sich auf dem Gerät keine Apps befinden, die einen impliziten Intent empfangen können, stürzt eine App beim Aufrufen von startActivity()
ab. Um zuerst zu prüfen, ob eine App zum Empfangen des Intents vorhanden ist, rufen Sie resolveActivity()
im Objekt Intent
auf. Wenn das Ergebnis nicht null ist, gibt es mindestens eine Anwendung, die den Intent verarbeiten kann. Du kannst startActivity()
bedenkenlos aufrufen. Ist das Ergebnis null, verwenden Sie den Intent nicht und deaktivieren Sie nach Möglichkeit die Funktion, die den Intent aufruft.
Wenn Sie nicht wissen, wie Intents oder Intent-Filter erstellt werden, lesen Sie zuerst den Artikel 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-Sprachbedienung
Google-Sprachbedienung löst einige der auf dieser Seite aufgeführten Intents als Antwort auf Sprachbefehle aus. Weitere Informationen finden Sie unter Erste Schritte mit der System-Sprachbedienung.
Wecker
Im Folgenden finden Sie gängige Aktionen für Wecker-Apps, einschließlich der Informationen, die Sie zum Erstellen eines Intent-Filters benötigen, um die Fähigkeit Ihrer App zum Ausführen der einzelnen Aktionen zu bewerben.
Wecker stellen
Verwende zum Erstellen eines neuen Weckers die Aktion ACTION_SET_ALARM
und gib mithilfe der folgenden Extras Weckerdetails wie die Uhrzeit und die Nachricht an.
Hinweis:Unter Android 2.3 (API-Level 9) und niedriger sind nur die Stunden, Minuten und Nachrichtenextras 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
- Stunde, in der der Wecker gestellt wird.
EXTRA_MINUTES
- Die Minuten für den Wecker.
EXTRA_MESSAGE
- Eine benutzerdefinierte Nachricht zur Identifizierung des Alarms.
EXTRA_DAYS
- Eine
ArrayList
mit allen Wochentagen, an denen dieser Wecker wiederholt wird. Jeder Tag muss mit einer Ganzzahl aus der KlasseCalendar
deklariert werden, z. B.MONDAY
.Bei einmaligen Weckern sollte dieses Zusatz nicht angegeben werden.
EXTRA_RINGTONE
- Ein
content:
-URI, der einen Klingelton für den Wecker oderVALUE_RINGTONE_SILENT
für keinen Klingelton angibt.Wenn Sie den Standardklingelton verwenden möchten, geben Sie dieses zusätzliche Element nicht an.
EXTRA_VIBRATE
- Boolescher Wert, der angibt, ob bei diesem Wecker vibrieren soll.
EXTRA_SKIP_UI
- Ein boolescher Wert, der angibt, ob die antwortende App die Benutzeroberfläche beim Einstellen des Weckers überspringen muss. Wenn „true“ festgelegt ist, muss die App jede Bestätigungs-UI umgehen und den angegebenen Alarm einschalten.
Beispiel-Intent:
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 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 zum Erstellen eines Countdown-Timers die Aktion ACTION_SET_TIMER
und gib mithilfe der folgenden Extras Timerdetails wie die Dauer an.
Hinweis:Dieser Intent 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 Kennzeichnung des Timers.
EXTRA_SKIP_UI
- Ein boolescher Wert, der angibt, ob die antwortende App die UI beim Einstellen des Timers überspringen muss. Wenn „true“ festgelegt ist, muss die App jede Bestätigungs-UI umgehen und den angegebenen Timer starten.
Beispiel-Intent:
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 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
Um die Liste der Alarme aufzurufen, verwenden Sie die Aktion ACTION_SHOW_ALARMS
.
Obwohl nur wenige Apps diesen Intent aufrufen, da er hauptsächlich von System-Apps verwendet wird, kann jede App, die als Wecker dient, diesen Intent-Filter implementieren und mit der Liste der aktuellen Alarme reagieren.
Hinweis:Dieser Intent ist ab Android 4.4 (API-Level 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 von Terminen ist eine häufige Aktion für Kalender-Apps. Erstellen Sie mithilfe der Informationen im folgenden Abschnitt einen Intent-Filter, um die Fähigkeit Ihrer App zum Ausführen dieser Aktion zu bewerben.
Kalendertermin hinzufügen
Verwenden Sie die Aktion ACTION_INSERT
und geben Sie den Daten-URI mit Events.CONTENT_URI
an, um dem Kalender des Nutzers ein neues Ereignis hinzuzufügen.
Sie können dann mithilfe der folgenden Extras verschiedene Termindetails 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 ein ganztägiges Ereignis handelt.
EXTRA_EVENT_BEGIN_TIME
- Die Startzeit des Ereignisses (Millisekunden seit Epoche).
EXTRA_EVENT_END_TIME
- Das Ende des Ereignisses (Millisekunden seit Epoche).
TITLE
- Der Titel des Termins.
DESCRIPTION
- Die Beschreibung des Ereignisses.
EVENT_LOCATION
- Der Veranstaltungsort
EXTRA_EMAIL
- Eine durch Kommas getrennte Liste von E-Mail-Adressen, die die eingeladenen Personen enthalten.
Mit den in der Klasse
CalendarContract.EventsColumns
definierten Konstanten können wesentlich mehr Ereignisdetails angegeben werden.
Beispiel-Intent:
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, einschließlich der Informationen, die Sie zum Erstellen eines Intent-Filters benötigen, um die Fähigkeit Ihrer App zur Ausführung der einzelnen Aktionen zu bewerben.
Bild oder Video aufnehmen und zurücksenden
Mit der Aktion „ACTION_IMAGE_CAPTURE
“ oder „ACTION_VIDEO_CAPTURE
“ kannst du eine Kamera-App öffnen und das Foto oder Video erhalten. Geben Sie außerdem unter EXTRA_OUTPUT
den Speicherort des URI an, an dem die Kamera das Foto oder Video speichern soll.
- Aktion
ACTION_IMAGE_CAPTURE
oder
ACTION_VIDEO_CAPTURE
- Daten-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 wieder auf Ihre Aktivität gesetzt hat, also 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 ACTION_IMAGE_CAPTURE
zum Aufnehmen eines Fotos verwenden, gibt die Kamera möglicherweise auch eine verkleinerte Kopie (Miniaturansicht) des Fotos im Ergebnis Intent
zurück, die als Bitmap
in einem zusätzlichen Feld namens "data"
gespeichert wird.
Beispiel-Intent:
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. ... } }
Orientieren Sie sich dazu an dem folgenden Intent-Beispiel, wenn Sie mit Android 12 (API-Level 31) oder höher arbeiten.
Beispiel-Intent:
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 und zum Erstellen eines geeigneten Uri
für den Ausgabeort finden Sie unter Fotos aufnehmen bzw. 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>
Bei der Verarbeitung dieses Intents solltest du deine Aktivität auf das zusätzliche EXTRA_OUTPUT
im eingehenden Intent
prüfen lassen. Speichern Sie dann das aufgenommene Bild oder Video an der durch dieses Extra angegebenen Position und rufen Sie setResult()
mit einem Intent
auf, das eine komprimierte Miniaturansicht in einem zusätzlichen Name mit dem Namen "data"
enthält.
Kamera-App im Standbildmodus starten
Verwende die Aktion INTENT_ACTION_STILL_IMAGE_CAMERA
, um eine Kamera-App im Standbildmodus zu öffnen.
- Aktion
INTENT_ACTION_STILL_IMAGE_CAMERA
- Daten-URI-Schema
- Keine
- MIME-Typ
- Keine
- Extras
- Keine
Beispiel-Intent:
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
- Daten-URI-Schema
- Keine
- MIME-Typ
- Keine
- Extras
- Keine
Beispiel-Intent:
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/Kontakte App
Im Folgenden finden Sie gängige Aktionen für Anwendungen zur Kontaktverwaltung, einschließlich der Informationen, die Sie zum Erstellen eines Intent-Filters benötigen, um die Fähigkeit Ihrer App zum Ausführen der einzelnen Aktionen zu bewerben.
Kontakt auswählen
Wenn der Nutzer einen Kontakt auswählen und Ihrer Anwendung Zugriff auf alle Kontaktdaten gewähren soll, verwenden Sie die Aktion ACTION_PICK
und geben Sie als MIME-Typ Contacts.CONTENT_TYPE
an.
Das Ergebnis Intent
, das an Ihren Callback onActivityResult()
gesendet wird, enthält den URI content:
, der auf den ausgewählten Kontakt verweist. Die Antwort gewährt Ihrer App temporäre Berechtigungen, diesen Kontakt mithilfe der Contacts Provider API zu lesen, auch wenn Ihre App die Berechtigung READ_CONTACTS
nicht 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 zur Auswahl bestimmter Kontaktdaten.
- Aktion
ACTION_PICK
- Daten-URI-Schema
- Keine
- MIME-Typ
Contacts.CONTENT_TYPE
Beispiel-Intent:
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 nach dem Kontakt-URI 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 markiert ist. Wenn Sie jedoch genauere Daten über einen bestimmten Kontakt wie Telefonnummer oder E-Mail-Adresse abrufen möchten, benötigen Sie die Berechtigung READ_CONTACTS
.
Bestimmte Kontaktdaten auswählen
Wenn der Nutzer eine bestimmte Information von 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 als MIME-Typ einen der folgenden Inhaltstypen an, z. B. CommonDataKinds.Phone.CONTENT_TYPE
, um die Telefonnummer des Kontakts abzurufen.
Hinweis : In vielen Fällen muss Ihre App die Berechtigung READ_CONTACTS
haben, um bestimmte Informationen zu einem bestimmten Kontakt aufzurufen.
Wenn Sie nur einen Datentyp von einem Kontakt abrufen müssen, ist dieses Verfahren mit einem CONTENT_TYPE
aus den ContactsContract.CommonDataKinds
-Klassen effizienter als die Verwendung des Contacts.CONTENT_TYPE
, wie im vorherigen Abschnitt gezeigt. So erhalten Sie direkten Zugriff auf die gewünschten Daten, ohne dass Sie eine komplexere Abfrage an Contact Provider durchführen müssen.
Das Ergebnis Intent
, das an Ihren onActivityResult()
-Callback gesendet wird, enthält den URI content:
, der auf die ausgewählten Kontaktdaten verweist. Durch die Antwort werden Ihrer App temporäre Berechtigungen zum Lesen dieser Kontaktdaten gewährt, auch wenn Ihre App die Berechtigung READ_CONTACTS
nicht enthält.
- Aktion
ACTION_PICK
- Daten-URI-Schema
- Keine
- MIME-Typ
-
CommonDataKinds.Phone.CONTENT_TYPE
- Wählen Sie einen Kontakt aus, der eine Telefonnummer enthält.
CommonDataKinds.Email.CONTENT_TYPE
- Wählen Sie Kontakte mit einer E-Mail-Adresse aus.
CommonDataKinds.StructuredPostal.CONTENT_TYPE
- Wählen Sie Kontakte mit einer Postanschrift aus.
Oder einer von vielen anderen
CONTENT_TYPE
-Werten unterContactsContract
.
Beispiel-Intent:
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
Wenn Sie die Details zu einem bekannten Kontakt aufrufen 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, die URI des Kontakts anfänglich abzurufen:
- Verwenden Sie den Kontakt-URI, der im vorherigen Abschnitt von der Aktion
ACTION_PICK
zurückgegeben wird. Für diesen Ansatz sind keine App-Berechtigungen erforderlich. - Sie können direkt auf die Liste aller Kontakte zugreifen, wie unter Liste von Kontakten abrufen beschrieben. Für diesen Ansatz ist die Berechtigung
READ_CONTACTS
erforderlich.
- Aktion
ACTION_VIEW
- Daten-URI-Schema
content:<URI>
- MIME-Typ
- Keine. Der Typ wird aus dem Kontakt-URI abgeleitet.
Beispiel-Intent:
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 Möglichkeiten, die Kontakt-URI anfänglich abzurufen:
- Verwenden Sie den Kontakt-URI, der im vorherigen Abschnitt von der Aktion
ACTION_PICK
zurückgegeben wird. Für diesen Ansatz sind keine App-Berechtigungen erforderlich. - Sie können direkt auf die Liste aller Kontakte zugreifen, wie unter Liste von Kontakten abrufen beschrieben. Für diesen Ansatz ist die Berechtigung
READ_CONTACTS
erforderlich.
- Aktion
ACTION_EDIT
- Daten-URI-Schema
content:<URI>
- MIME-Typ
- Der Typ wird aus dem Kontakt-URI abgeleitet.
- Extras
- Mindestens eines der in
ContactsContract.Intents.Insert
definierten Extras, damit Sie die Felder der Kontaktdaten ausfüllen können
Beispiel-Intent:
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 zum Einfügen eines neuen Kontakts die Aktion ACTION_INSERT
, geben Sie Contacts.CONTENT_TYPE
als MIME-Typ an und fügen Sie alle bekannten Kontaktdaten in Extras hinzu, die durch Konstanten in ContactsContract.Intents.Insert
angegeben werden.
- Aktion
ACTION_INSERT
- Daten-URI-Schema
- Keine
- MIME-Typ
Contacts.CONTENT_TYPE
- Extras
- Mindestens eines der unter
ContactsContract.Intents.Insert
definierten Extras
Beispiel-Intent:
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 mithilfe von Intents ändern.
E-Mail-Apps schreiben häufig eine E-Mail mit optionalen Anhängen. Erstellen Sie mithilfe der Informationen im folgenden Abschnitt einen Intent-Filter, um die Fähigkeit Ihrer App zum Ausführen dieser Aktion zu bewerben.
E-Mail mit optionalen Anhängen schreiben
Wählen Sie zum Schreiben einer E-Mail eine der folgenden Aktionen aus, je nachdem, ob Sie Anhänge einfügen möchten oder nicht. Fügen Sie E-Mail-Details wie Empfänger und Betreff mithilfe der aufgeführten zusätzlichen Schlüssel hinzu.
- Aktion
ACTION_SENDTO
(für keinen Anhang) oder
ACTION_SEND
(für einen Anhang) oder
ACTION_SEND_MULTIPLE
(für mehrere Anhänge)- Daten-URI-Schema
- Keine
- MIME-Typ
-
"text/plain"
"*/*"
- Extras
-
Intent.EXTRA_EMAIL
- Ein String-Array, das alle E-Mail-Adressen der „An“-Empfänger enthält.
Intent.EXTRA_CC
- Ein String-Array mit allen „CC“-Empfänger-E-Mail-Adressen.
Intent.EXTRA_BCC
- Ein String-Array, das alle E-Mail-Adressen der Empfänger im Feld „Bcc“ enthält.
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
, der auf den Anhang verweist. Wenn Sie die AktionACTION_SEND_MULTIPLE
verwenden, ist dies stattdessen einArrayList
-Objekt mit mehrerenUri
-Objekten.
Beispiel-Intent:
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 sichergehen möchten, dass Ihr Intent nur von einer E-Mail-App und nicht von einer SMS- oder sozialen App verarbeitet wird, verwenden Sie die Aktion ACTION_SENDTO
und fügen Sie das Datenschema "mailto:"
ein, 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, einschließlich der Informationen, die Sie zum Erstellen eines Intent-Filters benötigen, um die Fähigkeit Ihrer Anwendung zum Ausführen der einzelnen Aktionen zu bewerben.
Einen bestimmten Dateityp abrufen
Wenn der Nutzer eine Datei wie ein Dokument oder ein Foto auswählen und einen Verweis auf Ihre Anwendung zurückgeben soll, verwenden Sie die Aktion ACTION_GET_CONTENT
und geben Sie den gewünschten MIME-Typ an. Der an Ihre Anwendung zurückgegebene Dateiverweis ist vorübergehend für den aktuellen Lebenszyklus Ihrer Aktivität. Wenn Sie also 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 während des Vorgangs 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 Methode onActivityResult()
gesendet wird, enthält Daten mit einem URI, der auf die Datei verweist.
Der URI kann ein beliebiger URI sein, z. B. ein http:
-URI, ein file:
-URI oder ein content:
-URI. Wenn Sie die auswählbaren Dateien jedoch auf Dateien beschränken möchten, auf die über einen Contentanbieter (content:
-URI) zugegriffen werden kann und die als Dateistream mit openFileDescriptor()
verfügbar sind, fügen Sie dem Intent die Kategorie CATEGORY_OPENABLE
hinzu.
Unter Android 4.3 (API-Level 18) und höher können Sie dem Nutzer auch die Möglichkeit geben, mehrere Dateien auszuwählen. Fügen Sie dazu EXTRA_ALLOW_MULTIPLE
zum Intent hinzu und setzen Sie diesen auf true
.
Sie können dann auf alle ausgewählten Dateien in einem ClipData
-Objekt zugreifen, das von getClipData()
zurückgegeben wird.
- Aktion
ACTION_GET_CONTENT
- Daten-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. Ein Download über einen Remote-Dienst ist nicht erforderlich.
- Kategorie (optional)
-
CATEGORY_OPENABLE
- Es werden nur „öffnebare“ Dateien zurückgegeben, die mit
openFileDescriptor()
als Datenstream dargestellt werden können.
Beispiel-Intent 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 einen Intent-Filter zur Rückgabe 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>
Einen bestimmten Dateityp öffnen
Anstatt eine Kopie einer Datei abzurufen, die Sie unter Android 4.4 oder höher in Ihre App importieren müssen, können Sie mit der Aktion ACTION_GET_CONTENT
das Öffnen einer Datei anfordern, die von einer anderen App verwaltet wird. Dazu verwenden Sie die Aktion ACTION_OPEN_DOCUMENT
und geben einen MIME-Typ an.
Damit der Nutzer auch ein neues Dokument erstellen kann, in das deine App schreiben kann, verwende stattdessen die Aktion ACTION_CREATE_DOCUMENT
.
Anstatt ein Dokument aus vorhandenen PDF-Dokumenten auszuwählen, können Nutzer mit dem Intent ACTION_CREATE_DOCUMENT
auswählen, wo sie ein neues Dokument erstellen möchten, z. B. in einer anderen App, die den Speicher des Dokuments verwaltet. Die Anwendung erhält dann den URI-Speicherort, an dem das neue Dokument geschrieben werden kann.
Während der Intent, der von der Aktion ACTION_GET_CONTENT
an die Methode onActivityResult()
gesendet wird, einen URI eines beliebigen Typs zurückgeben kann, gibt der Ergebnis-Intent von ACTION_OPEN_DOCUMENT
und ACTION_CREATE_DOCUMENT
die ausgewählte Datei immer als content:
-URI an, 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 Anwendung langfristig Lesezugriff auf die Datei, möglicherweise auch Schreibzugriff. Die Aktion ACTION_OPEN_DOCUMENT
ist besonders nützlich, wenn Sie eine vorhandene Datei lesen möchten, ohne eine Kopie in Ihre App zu erstellen, oder wenn Sie eine Datei öffnen und direkt bearbeiten möchten.
Sie können dem Nutzer auch die Möglichkeit geben, mehrere Dateien auszuwählen. Fügen Sie dazu EXTRA_ALLOW_MULTIPLE
zum Intent hinzu und setzen Sie ihn auf true
.
Wenn der Nutzer nur ein Element auswählt, können Sie das Element von getData()
abrufen.
Wenn der Nutzer mehr als ein Element auswählt, gibt getData()
null zurück und Sie müssen stattdessen jedes Element aus einem ClipData
-Objekt abrufen, das von getClipData()
zurückgegeben wird.
Hinweis:Der Intent muss einen MIME-Typ angeben und muss die Kategorie CATEGORY_OPENABLE
deklarieren. Sie können gegebenenfalls mehrere MIME-Typen angeben. Fügen Sie dazu ein Array von MIME-Typen mit dem Zusatz EXTRA_MIME_TYPES
hinzu. In diesem Fall müssen Sie den primären MIME-Typ in setType()
auf "*/*"
festlegen.
- Aktion
ACTION_OPEN_DOCUMENT
oder
ACTION_CREATE_DOCUMENT
- Daten-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 Anwendung 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. Ein Download über einen Remote-Dienst ist nicht erforderlich.
- Kategorie
-
CATEGORY_OPENABLE
- Es werden nur „öffnebare“ Dateien zurückgegeben, die mit
openFileDescriptor()
als Datenstream dargestellt werden können.
Beispiel-Intent 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, die aus verschiedenen Anwendungen verfügbar sind, in einer einheitlichen Benutzeroberfläche an.
Wenn du die Dateien deiner App auf dieser UI bereitstellen und von anderen Apps öffnen lassen möchtest, musst du einen 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 dafür sorgen, dass die von Ihrer App verwalteten Dateien aus anderen Apps geöffnet werden können, finden Sie unter Dateien mit dem Storage Access Framework öffnen.
Lokale Aktionen
Ein Auto anzurufen ist eine gängige Aktion. Erstellen Sie einen Intent-Filter, um anzugeben, ob Ihre App diese Aktion ausführen kann. Verwenden Sie dazu die Informationen im folgenden Abschnitt.
Taxi rufen
Mit der Aktion ACTION_RESERVE_TAXI_RESERVATION
können Sie ein Taxi rufen.
Hinweis:Apps müssen den Nutzer um Bestätigung bitten, bevor diese Aktion ausgeführt werden kann.
- Aktion
ACTION_RESERVE_TAXI_RESERVATION
- Daten-URI
- Keine
- MIME-Typ
- Keine
- Extras
- Keine
Beispiel-Intent:
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 häufige Aktion für Karten-Apps. Erstellen Sie mithilfe der Informationen im folgenden Abschnitt einen Intent-Filter, um die Fähigkeit Ihrer App zum Ausführen dieser Aktion zu bewerben.
Standort auf einer Karte anzeigen
Verwenden Sie zum Öffnen einer Karte die Aktion ACTION_VIEW
und geben Sie die Standortinformationen in den Intent-Daten mit einem der folgenden Schemas an.
- Aktion
ACTION_VIEW
- Daten-URI-Schema
-
geo:latitude,longitude
- Die Karte für den angegebenen Längen- und Breitengrad anzeigen
Beispiel:
"geo:47.6,-122.3"
geo:latitude,longitude?z=zoom
- Karte für den angegebenen Längen- und Breitengrad bei einer bestimmten Zoomstufe einblenden Bei Zoomstufe 1 wird die gesamte Erde in der Mitte des angegebenen lat, lng angezeigt. Die höchste Zoomstufe ist 23.
Beispiel:
"geo:47.6,-122.3?z=11"
geo:0,0?q=lat,lng(label)
- Die Karte mit einem Stringlabel für den angegebenen Längen- und Breitengrad anzeigen
Beispiel:
"geo:0,0?q=34.99,-106.61(Treasure)"
geo:0,0?q=my+street+address
- Zeigt den Standort für „meine Adresse“ an. Das kann eine bestimmte Adresse oder Standortabfrage sein.
Beispiel:
"geo:0,0?q=1600+Amphitheatre+Parkway%2C+CA"
Hinweis: Alle Strings, die im URI
geo
übergeben werden, müssen codiert sein. Der String1st & Pike, Seattle
wird beispielsweise zu1st%20%26%20Pike%2C%20Seattle
. Leerzeichen im String werden mit%20
codiert oder durch das Pluszeichen (+
) ersetzt.
- MIME-Typ
- Keine
Beispiel-Intent:
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 gängige Aktionen für Musik- und Video-Apps, einschließlich der Informationen, die Sie zum Erstellen eines Intent-Filters benötigen, um die Fähigkeit Ihrer App zur Ausführung der einzelnen Aktionen zu bewerben.
Mediendatei wiedergeben
Verwenden Sie zum Abspielen einer Musikdatei die Aktion ACTION_VIEW
und geben Sie den URI-Speicherort der Datei in den Intent-Daten an.
- Aktion
ACTION_VIEW
- Daten-URI-Schema
-
file:<URI>
content:<URI>
http:<URL>
- MIME-Typ
-
"audio/*"
"application/ogg"
"application/x-ogg"
"application/itunes"
- Oder alle anderen, die für Ihre App erforderlich sind.
Beispiel-Intent:
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
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ür diesen Intent führt eine Suche in ihrem Inventar durch, um vorhandene Inhalte mit der angegebenen Abfrage abzugleichen, und startet die Wiedergabe dieses Inhalts.
Fügen Sie in diesem Intent das zusätzliche String EXTRA_MEDIA_FOCUS
hinzu, um den gewünschten Suchmodus anzugeben. Im Suchmodus kann beispielsweise angegeben werden, ob nach einem Künstler- oder Songnamen gesucht werden soll.
- Aktion
INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH
- Daten-URI-Schema
- Keine
- MIME-Typ
- Keine
- Extras
-
MediaStore.EXTRA_MEDIA_FOCUS
(erforderlich)-
Gibt den Suchmodus an, d. h., ob der Nutzer nach einem bestimmten Künstler, Album, Titel oder einer bestimmten Playlist sucht. Die meisten Suchmodi erfordern zusätzliche Extras. Wenn der Nutzer beispielsweise einen bestimmten Song anhören möchte, hat der Intent möglicherweise drei zusätzliche Extras: 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 basierend auf einer intelligenten Auswahl ab, z. B. die letzte Playlist, die sich der Nutzer angehört hat.
Zusätzliche Extras:
QUERY
(erforderlich): ein leerer String. Dieses Extra wird aus Gründen der Abwärtskompatibilität immer bereitgestellt. Vorhandene Apps, die die Suchmodi nicht kennen, können diesen Intent als unstrukturierte Suche verarbeiten.
Unstrukturiert –
"vnd.android.cursor.item/*"
-
Spiele einen bestimmten Titel, ein Album oder ein Genre über eine unstrukturierte Suchanfrage ab. Anwendungen können mit diesem Suchmodus einen Intent generieren, wenn sie den Inhaltstyp nicht identifizieren können, den der Nutzer warten möchte. Verwenden Sie nach Möglichkeit spezifischere Suchmodi.
Zusätzliche Extras:
QUERY
(erforderlich): ein String, der eine beliebige Kombination aus Künstler, Album, Titel oder Genre enthält.
Genre –
Audio.Genres.ENTRY_CONTENT_TYPE
-
Musik eines bestimmten Genres abspielen
Zusätzliche Extras:
"android.intent.extra.genre"
(erforderlich): das Genre.QUERY
(erforderlich): das Genre Dieses Extra wird aus Gründen der Abwärtskompatibilität immer bereitgestellt. Vorhandene Apps, die die Suchmodi nicht kennen, können diesen 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 oder Genre enthält. Dieses Extra wird aus Gründen der Abwärtskompatibilität immer bereitgestellt. Vorhandene Apps, die die Suchmodi nicht kennen, können diesen 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 AlbumEXTRA_MEDIA_ARTIST
: der Künstler."android.intent.extra.genre"
: das Genre.QUERY
(erforderlich): Ein String, der eine beliebige Kombination aus Album oder Künstler enthält. Dieses Extra wird aus Gründen der Abwärtskompatibilität immer bereitgestellt. Vorhandene Apps, die die Suchmodi nicht kennen, können diesen Intent als unstrukturierte Suche verarbeiten.
Song –
"vnd.android.cursor.item/audio"
-
Spielen Sie einen bestimmten Titel ab.
Zusätzliche Extras:
EXTRA_MEDIA_ALBUM
: das AlbumEXTRA_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. Dieses Extra wird aus Gründen der Abwärtskompatibilität immer bereitgestellt. Vorhandene Anwendungen, die die Suchmodi nicht kennen, können diesen Intent als unstrukturierte Suche verarbeiten.
Playlist –
Audio.Playlists.ENTRY_CONTENT_TYPE
-
Spiele eine bestimmte Playlist oder eine Playlist ab, die bestimmten Kriterien entspricht, die durch zusätzliche Extras festgelegt wurden.
Zusätzliche Extras:
EXTRA_MEDIA_ALBUM
: das AlbumEXTRA_MEDIA_ARTIST
: der Künstler."android.intent.extra.genre"
: das Genre."android.intent.extra.playlist"
: die Playlist.EXTRA_MEDIA_TITLE
: der Name des Titels, 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 aus Gründen der Abwärtskompatibilität immer bereitgestellt. Vorhandene Apps, die die Suchmodi nicht kennen, können diesen Intent als unstrukturierte Suche verarbeiten.
Beispiel-Intent:
Wenn der Nutzer Musik von einem bestimmten Künstler hören möchte, könnte 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 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 diesen Intent in Ihrer Aktivität verarbeiten, prüfen Sie den Wert des zusätzlichen EXTRA_MEDIA_FOCUS
im eingehenden Intent
, um den Suchmodus zu bestimmen. Sobald Ihre Aktivität den Suchmodus identifiziert hat, lesen Sie die Werte der zusätzlichen Extras für diesen bestimmten Suchmodus.
Anhand dieser Informationen kann Ihre Anwendung dann die Suche innerhalb des Inventars durchführen, um die Inhalte wiederzugeben, die der Suchanfrage entsprechen. Dies wird im folgenden Beispiel dargestellt.
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
In Notizen-Apps werden häufig Notizen erstellt. Erstellen Sie mithilfe der Informationen im folgenden Abschnitt einen Intent-Filter, um die Fähigkeit Ihrer App zum Ausführen dieser Aktion zu bewerben.
Notiz erstellen
Verwenden Sie zum Erstellen einer neuen Notiz die Aktion
ACTION_CREATE_NOTE
und geben Sie Notizendetails wie Betreff und Text mithilfe der folgenden Extras an.
Hinweis:Apps müssen den Nutzer um Bestätigung bitten, bevor diese Aktion ausgeführt werden kann.
- Aktion
-
ACTION_CREATE_NOTE
- Daten-URI-Schema
- Keine
- MIME-Typ
-
PLAIN_TEXT_TYPE
- "*/*"
- Extras
-
-
EXTRA_NAME
- Ein String, der den Titel oder Betreff der Notiz angibt.
-
EXTRA_TEXT
- Ein String, der den Text der Notiz angibt.
-
- Aktion
-
ACTION_DIAL
– Öffnet die Telefon App oder die Telefon App.ACTION_CALL
– Tätigt einen Anruf (BerechtigungCALL_PHONE
erforderlich)
- Daten-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 über die Google-Sprachbedienung unterstützen
- Extras
-
QUERY
- Ein String, der die Suchanfrage enthält.
- Aktion
ACTION_WEB_SEARCH
- Daten-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 . - Daten-URI-Schema
- Keine
- MIME-Typ
- Keine
- Aktion
ACTION_SENDTO
oder
ACTION_SEND
oder
ACTION_SEND_MULTIPLE
- Daten-URI-Schema
-
sms:<phone_number>
smsto:<phone_number>
mms:<phone_number>
mmsto:<phone_number>
Diese Schemas werden alle gleich gehandhabt.
- 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 Textnachricht.
EXTRA_STREAM
- Ein
Uri
-Wert, der auf das Bild oder Video verweist, das Sie anhängen möchten. Wenn Sie die AktionACTION_SEND_MULTIPLE
verwenden, ist dieses zusätzliche Element einArrayList
vonUri
-Objekten, die auf die Bilder oder Videos verweisen, die angehängt werden sollen.
- Aktion
ACTION_VIEW
- Daten-URI-Schema
http:<URL>
https:<URL>
- MIME-Typ
-
"text/plain"
"text/html"
"application/xhtml+xml"
"application/vnd.wap.xhtml+xml"
- Richte ein Android-Gerät für die Entwicklung ein oder verwende 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>
Beispiele:
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-Intent:
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>
Smartphone
Bei Telefon-Apps ist das Initiieren eines Anrufs eine gängige Aktion. Erstellen Sie mithilfe der Informationen im folgenden Abschnitt einen Intent-Filter, um die Fähigkeit Ihrer App zum Ausführen dieser Aktion 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 anhand des folgenden URI-Schemas an. Wenn die Telefon-App geöffnet wird, wird die Telefonnummer angezeigt und der Nutzer muss auf die Schaltfläche Anrufen tippen, um den Anruf zu starten.
Verwenden Sie die Aktion ACTION_CALL
und geben Sie nach dem folgenden URI-Schema eine Telefonnummer an, um einen Anruf direkt zu tätigen. Wenn die Telefon-App geöffnet wird, wird der Anruf eingeleitet. Der Nutzer muss nicht auf die Schaltfläche Anrufen tippen.
Für die Aktion ACTION_CALL
müssen Sie Ihrer Manifestdatei die Berechtigung CALL_PHONE
hinzufügen:
<uses-permission android:name="android.permission.CALL_PHONE" />
Gültige Telefonnummern sind gemäß IETF RFC 3966 definiert. Gültige Beispiele:
Der Dialer der Telefon-App eignet sich gut zur Normalisierung von Schemas wie Telefonnummern. Das beschriebene Schema ist also in der Methode Uri.parse()
nicht zwingend erforderlich.
Wenn Sie jedoch ein Schema noch nicht ausprobiert haben oder nicht sicher sind, ob es verarbeitet werden kann, verwenden Sie stattdessen die Methode Uri.fromParts()
.
Beispiel-Intent:
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); } }
Suche
Im Folgenden finden Sie gängige Aktionen für Such-Apps, einschließlich der Informationen, die Sie zum Erstellen eines Intent-Filters benötigen, um die Fähigkeit Ihrer App zum Ausführen der einzelnen Aktionen zu bewerben.
Mit einer bestimmten App suchen
Damit die Suche im Kontext Ihrer App unterstützt wird, 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 raten davon ab, SEARCH_ACTION
für die App-Suche zu verwenden.
Implementiere stattdessen die Aktion GET_THING
, um die integrierte Unterstützung von Google Assistant für die In-App-Suche zu nutzen. Weitere Informationen findest du in der Dokumentation zu App Actions zu 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>
Eine Internetsuche durchführen
Verwenden Sie zum Starten einer Websuche die Aktion ACTION_WEB_SEARCH
und geben Sie den Suchstring im zusätzlichen SearchManager.QUERY
an.
Beispiel-Intent:
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
Um einen Bildschirm in den Systemeinstellungen zu öffnen, wenn der Nutzer etwas ändern muss, verwenden Sie eine der folgenden Intent-Aktionen:
Beispiel-Intent:
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
SMS/MMS mit Anhang werden häufig in SMS-/MMS-Apps verfasst. Erstellen Sie mithilfe der Informationen im folgenden Abschnitt einen Intent-Filter, um die Fähigkeit Ihrer App zum Ausführen dieser Aktion zu bewerben.
SMS/MMS mit Anhang schreiben
Verwenden Sie zum Starten einer SMS oder MMS eine der folgenden Intent-Aktionen und geben Sie Nachrichtendetails wie Telefonnummer, Betreff und Nachrichtentext mit den folgenden zusätzlichen Schlüsseln an.
Beispiel-Intent:
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 Ihr Intent nur von einer SMS-App und nicht von anderen E-Mail- oder sozialen Apps verarbeitet werden soll, verwenden Sie die Aktion ACTION_SENDTO
und fügen Sie das Datenschema "smsto:"
ein, 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-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 sind. Weitere Informationen finden Sie in der Dokumentation unter Telephony
.
Webbrowser
Bei Webbrowser-Anwendungen wird häufig eine Web-URL geladen. Erstellen Sie mithilfe der Informationen im folgenden Abschnitt einen Intent-Filter, um die Fähigkeit Ihrer App zum Ausführen dieser Aktion zu bewerben.
Web-URL laden
Verwenden Sie die Aktion ACTION_VIEW
und geben Sie die Web-URL in den Intent-Daten an, um eine Webseite zu öffnen.
Beispiel-Intent:
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 deine App installiert haben, wird dann über Links von E-Mails oder anderen Webseiten, die auf deine Website verweisen, deine Android-App statt deiner Webseite geöffnet. Weitere Informationen zum Umgang mit Android-App-Links
Ab Android 12 (API-Level 31) löst ein generischer Web-Intent nur dann eine Aktivität in Ihrer App auf, wenn Ihre App für die Domain genehmigt ist, die in diesem Web Intent enthalten ist. Wenn Ihre Anwendung für die Domain nicht genehmigt wird, wird der Web-Intent stattdessen in die Standard-Browseranwendung des Nutzers aufgelöst.
Intents mit der Android Debug Bridge prüfen
Wenn Sie prüfen möchten, ob Ihre App auf die zu unterstützenden Intents reagiert, können Sie mit dem adb
-Tool bestimmte Intents auslösen. Gehen Sie dazu so vor:
Weitere Informationen finden Sie unter Shell-Befehle ausgeben.