Häufig verwendete Intents

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 ansehen“ oder „Foto aufnehmen“. Diese Art von Intent wird als impliziter Intent bezeichnet, da er nicht die zu startende App-Komponente angibt, sondern eine Aktion und Daten, mit denen die Aktion ausgeführt werden soll.

Wenn du startActivity() oder startActivityForResult() aufrufst und einen impliziten Intent übergibst, löst das System den Intent in eine App auf, die den Intent verarbeiten kann, und startet die entsprechende Activity. Wenn es mehr als eine App gibt, die den Intent verarbeiten kann, wird dem Nutzer ein Dialogfeld angezeigt, in dem er die gewünschte App auswählen kann.

Auf dieser Seite werden mehrere implizite Intents beschrieben, mit denen du gängige Aktionen ausführen kannst. Sie sind nach dem App-Typ sortiert, der den Intent verarbeitet. In jedem Abschnitt wird auch gezeigt, wie du einen Intent-Filter erstellst, um die Fähigkeit deiner App zur Ausführung der Aktion zu bewerben.

Achtung:Wenn auf dem Gerät keine Apps vorhanden sind, die einen impliziten Intent empfangen können, stürzt eine App ab, wenn sie startActivity() aufruft. Prüfe zuerst, ob eine App vorhanden ist, die den Intent empfangen kann. Rufe dazu resolveActivity() für dein Intent-Objekt auf. Wenn das Ergebnis nicht null ist, gibt es mindestens eine App, die den Intent verarbeiten kann, und startActivity() kann sicher aufgerufen werden. Wenn das Ergebnis null ist, verwende den Intent nicht und deaktiviere nach Möglichkeit die Funktion, die den Intent aufruft.

Wenn du nicht weißt, wie du Intents oder Intent-Filter erstellst, lies zuerst den Hilfeartikel Intents und Intent-Filter.

Informationen zum Auslösen der auf dieser Seite aufgeführten Intents von Ihrem Entwicklungshost finden Sie im Abschnitt Intents mit der Android Debug Bridge prüfen.

Google Sprachbedienung

Google Voice löst als Reaktion auf Sprachbefehle einige der auf dieser Seite aufgeführten Intents aus. Weitere Informationen findest du unter Erste Schritte mit System-Sprachbefehlen.

Wecker

Im Folgenden sind gängige Aktionen für Wecker-Apps aufgeführt, einschließlich der Informationen, die du benötigst, um einen Intent-Filter zu erstellen, mit dem du die Fähigkeit deiner App zur Ausführung der einzelnen Aktionen bewerben kannst.

Wecker erstellen

Google Sprachbedienung

  • „Stell einen Wecker für 07:00 Uhr“

Wenn du einen neuen Wecker erstellen möchtest, verwende die Aktion ACTION_SET_ALARM und gib die Weckerdetails wie Uhrzeit und Nachricht mit den folgenden Extras an.

Hinweis:In Android 2.3 (API-Level 9) und niedriger sind nur die Extras für Stunde, Minuten und Nachricht verfügbar. Die anderen Extras sind in höheren Versionen der Plattform verfügbar.

Aktion
ACTION_SET_ALARM
Daten-URI
Keine
MIME-Typ
Keine
Extras
EXTRA_HOUR
Die Stunde für den Wecker.
EXTRA_MINUTES
Die Minuten für den Wecker.
EXTRA_MESSAGE
Eine benutzerdefinierte Nachricht zur Identifizierung des Alarms.
EXTRA_DAYS
Ein ArrayList mit jedem Wochentag, an dem dieser Wecker wiederholt wird. Jeder Tag muss mit einer Ganzzahl aus der Klasse Calendar deklariert werden, z. B. MONDAY.

Für einen einmaligen Wecker geben Sie dieses Extra nicht an.

EXTRA_RINGTONE
Ein content:-URI, der einen Klingelton für den Wecker angibt, oder VALUE_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 „true“, muss die App alle Bestätigungs-UIs umgehen und den angegebenen Wecker einstellen.

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);
    }
}
Hinweis:

Damit der Intent ACTION_SET_ALARM 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

Google Sprachbedienung

  • „Stell den Timer auf 5 Minuten“

Wenn du einen Countdown-Timer erstellen möchtest, verwende die Aktion ACTION_SET_TIMER und gib Timerdetails wie die Dauer mit den folgenden Extras 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, um den Timer zu identifizieren.
EXTRA_SKIP_UI
Ein boolescher Wert, der angibt, ob die antwortende App ihre Benutzeroberfläche beim Einstellen des Timers überspringen muss. Wenn „true“, muss die App alle Bestätigungs-UIs 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);
    }
}
Hinweis:

Damit der Intent ACTION_SET_TIMER 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 anzuzeigen.

Dieser Intent wird zwar nicht von vielen Apps aufgerufen, da er hauptsächlich von System-Apps verwendet wird, aber jede App, die als Wecker fungiert, kann diesen Intent-Filter implementieren und die Liste der aktuellen Wecker anzeigen.

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 eines Termins ist eine häufige Aktion in 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. Anschließend können Sie mit den folgenden Extras verschiedene Ereignisdetails angeben.

Aktion
ACTION_INSERT
Daten-URI
Events.CONTENT_URI
MIME-Typ
"vnd.android.cursor.dir/event"
Extras
EXTRA_EVENT_ALL_DAY
Ein boolescher Wert, der angibt, ob es sich um einen ganztägigen Termin handelt.
EXTRA_EVENT_BEGIN_TIME
Die Startzeit des Ereignisses (Millisekunden seit der Epoche).
EXTRA_EVENT_END_TIME
Die Endzeit des Ereignisses (Millisekunden seit Epoche).
TITLE
Der Titel des Ereignisses.
DESCRIPTION
Die Beschreibung des Ereignisses.
EVENT_LOCATION
Der Veranstaltungsort.
EXTRA_EMAIL
Eine durch Kommas getrennte Liste von E‑Mail-Adressen, die die Eingeladenen angeben.

Mit den in der Klasse CalendarContract.EventsColumns definierten Konstanten können viele weitere 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 sind gängige Aktionen für Kamera-Apps aufgeführt, einschließlich der Informationen, die du benötigst, um einen Intent-Filter zu erstellen, mit dem du die Fähigkeit deiner App zur Ausführung der einzelnen Aktionen bewerben kannst.

Bild oder Video aufnehmen und zurückgeben

Wenn Sie eine Kamera-App öffnen und das resultierende Foto oder Video erhalten möchten, verwenden Sie die Aktion ACTION_IMAGE_CAPTURE oder ACTION_VIDEO_CAPTURE. Geben Sie außerdem im Extra EXTRA_OUTPUT den URI-Speicherort 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 speichert (als Uri-Objekt).

Wenn die Kamera-App den Fokus erfolgreich an Ihre Aktivität zurückgibt, d. h. Ihre App den Callback onActivityResult() 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 mit ACTION_IMAGE_CAPTURE ein Foto 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-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.
        ...
    }
}

Wenn Sie Android 12 (API-Level 31) oder höher verwenden, sehen Sie sich das folgende Intent-Beispiel an.

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, einschließlich der Erstellung eines geeigneten Uri für den Ausgabespeicherort, 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>

Wenn du diesen Intent verarbeitest, sollte deine Aktivität nach dem Extra EXTRA_OUTPUT im eingehenden Intent suchen, das aufgenommene Bild oder Video an dem durch dieses Extra angegebenen Ort speichern und setResult() mit einem Intent aufrufen, das ein komprimiertes Thumbnail in einem Extra namens "data" enthält.

Kamera-App im Standbildmodus starten

Google Sprachbedienung

  • „Mach ein Foto.“

Wenn du eine Kamera-App im Standbildmodus öffnen möchtest, verwende die Aktion INTENT_ACTION_STILL_IMAGE_CAMERA.

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 öffnen

Google Sprachbedienung

  • „Video aufnehmen“

Wenn Sie eine Kamera-App im Videomodus öffnen möchten, verwenden Sie die Aktion INTENT_ACTION_VIDEO_CAMERA.

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-/Personen-App

Im Folgenden finden Sie gängige Aktionen für Apps zur Kontaktverwaltung, einschließlich der Informationen, die Sie zum Erstellen eines Intent-Filters benötigen, um die Fähigkeit Ihrer App 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 den onActivityResult()-Callback gesendet wird, enthält den content:-URI, der auf den ausgewählten Kontakt verweist. Die Antwort gewährt Ihrer App temporäre Berechtigungen, um diesen Kontakt über die Contacts Provider API zu lesen, auch wenn Ihre App die Berechtigung READ_CONTACTS nicht enthält.

Tipp:Wenn Sie nur Zugriff auf bestimmte Kontaktdaten wie eine Telefonnummer oder E‑Mail-Adresse benötigen, lesen Sie stattdessen den nächsten Abschnitt zum Auswählen 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 Kontaktdaten, nachdem Sie den Kontakt-URI haben, finden Sie unter Details für einen 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 spezifischere Daten zu einem bestimmten Kontakt lesen möchten, z. B. die Telefonnummer oder E‑Mail-Adresse, benötigen Sie die Berechtigung READ_CONTACTS.

Bestimmte Kontaktdaten auswählen

Wenn der Nutzer bestimmte Informationen aus einem Kontakt auswählen soll, z. B. eine Telefonnummer, eine E-Mail-Adresse oder einen anderen Datentyp, verwende die Aktion ACTION_PICK und gib 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 aufzurufen.

Wenn Sie nur einen Datentyp von einem Kontakt abrufen müssen, ist diese Technik mit einem CONTENT_TYPE aus den ContactsContract.CommonDataKinds-Klassen effizienter als die Verwendung des 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 Contacts Provider senden müssen.

Das Ergebnis Intent, das an den Callback onActivityResult() gesendet wird, enthält den URI content:, der auf die ausgewählten Kontaktdaten verweist. Die Antwort gewährt Ihrer App temporäre Berechtigungen zum Lesen dieser Kontaktdaten, auch wenn Ihre App nicht die Berechtigung READ_CONTACTS enthält.

Aktion
ACTION_PICK
Daten-URI-Schema
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 Postanschrift aus.

Oder einen der vielen anderen CONTENT_TYPE-Werte unter ContactsContract.

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.
            //...
        }
    }
}

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 abzurufen:

  • Verwenden Sie den Kontakt-URI, der von der im vorherigen Abschnitt gezeigten Aktion ACTION_PICK zurückgegeben wurde. Für diesen Ansatz sind keine App-Berechtigungen erforderlich.
  • Greifen Sie direkt auf die Liste aller Kontakte zu, wie unter Liste der Kontakte 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 du einen bekannten Kontakt bearbeiten möchtest, verwende die Aktion ACTION_EDIT, gib den Kontakt mit einem content:-URI als Intent-Daten an und füge alle bekannten Kontaktinformationen in Extras ein, die durch Konstanten in ContactsContract.Intents.Insert angegeben sind.

Es gibt zwei Möglichkeiten, den Kontakt-URI abzurufen:

  • Verwenden Sie den Kontakt-URI, der von der im vorherigen Abschnitt gezeigten Aktion ACTION_PICK zurückgegeben wurde. Für diesen Ansatz sind keine App-Berechtigungen erforderlich.
  • Greifen Sie direkt auf die Liste aller Kontakte zu, wie unter Liste der Kontakte 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
Eines oder mehrere der in ContactsContract.Intents.Insert definierten Extras, damit Sie 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

Wenn du einen neuen Kontakt einfügen möchtest, verwende die Aktion ACTION_INSERT, gib Contacts.CONTENT_TYPE als MIME-Typ an und füge alle bekannten Kontaktdaten in Extras ein, die durch Konstanten in ContactsContract.Intents.Insert angegeben sind.

Aktion
ACTION_INSERT
Daten-URI-Schema
Keine
MIME-Typ
Contacts.CONTENT_TYPE
Extras
Eines oder mehrere der in 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

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

Wenn Sie eine E‑Mail schreiben möchten, verwenden Sie eine der folgenden Aktionen, je nachdem, ob Sie Anhänge hinzufügen möchten oder nicht. Geben Sie außerdem E‑Mail-Details wie den Empfänger und den Betreff mit den aufgeführten zusätzlichen Schlüsseln an.

Aktion
ACTION_SENDTO (für keinen Anhang) oder
ACTION_SEND (für einen Anhang) oder
ACTION_SEND_MULTIPLE (für mehrere Anhänge)
Daten-URI-Schema
Keine
MIME-Typ
"text/plain"
"*/*"
Extras
Intent.EXTRA_EMAIL
Ein String-Array aller E‑Mail-Adressen der Empfänger im Feld „An“.
Intent.EXTRA_CC
Ein String-Array aller E‑Mail-Adressen von CC-Empfängern.
Intent.EXTRA_BCC
Ein String-Array aller E‑Mail-Adressen von Bcc-Empfängern.
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 Aktion ACTION_SEND_MULTIPLE verwenden, ist dies stattdessen ein ArrayList, das mehrere Uri-Objekte enthält.

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 Messaging- oder Social 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 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 ein Foto auszuwählen und einen Verweis an Ihre App zurückzugeben, verwenden Sie die Aktion ACTION_GET_CONTENT und geben Sie den gewünschten MIME-Typ an. Der an Ihre App zurückgegebene Dateiverweis ist für den aktuellen Lebenszyklus Ihrer Aktivität vorübergehend. Wenn Sie später darauf zugreifen möchten, müssen Sie eine Kopie importieren, die Sie später lesen können.

Mit diesem Intent kann der Nutzer auch eine neue Datei erstellen. Anstatt ein vorhandenes Foto auszuwählen, kann der Nutzer beispielsweise ein neues Foto mit der Kamera aufnehmen.

Der Ergebnis-Intent, der an die Methode onActivityResult() übergeben wird, enthält Daten mit einem URI, der auf die Datei verweist. Der URI kann beliebig sein, z. B. ein http:-URI, ein file:-URI oder ein content:-URI. Wenn du die auswählbaren Dateien jedoch auf diejenigen beschränken möchtest, auf die über einen Contentanbieter (ein content:-URI) zugegriffen werden kann und die als Dateistream mit openFileDescriptor() verfügbar sind, füge deinem Intent die Kategorie CATEGORY_OPENABLE hinzu.

Unter Android 4.3 (API-Level 18) und höher können Sie dem Intent auch EXTRA_ALLOW_MULTIPLE hinzufügen und auf true setzen, damit der Nutzer mehrere Dateien auswählen kann. Anschließend können Sie auf jede der 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 mehrere Dateien gleichzeitig auswählen kann.
EXTRA_LOCAL_ONLY
Ein boolescher Wert, der angibt, ob die zurückgegebene Datei direkt auf dem Gerät verfügbar sein muss, anstatt von einem Remotedienst heruntergeladen werden zu müssen.
Category (optional)
CATEGORY_OPENABLE
Um nur „öffenbare“ Dateien zurückzugeben, die als Dateistream mit openFileDescriptor() 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, der ein Foto zurückgibt:

<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 supports OpenableColumns
             and ContentResolver.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 der Angabe eines MIME-Typs eine Datei öffnen, die von einer anderen App verwaltet wird. Wenn Sie dem Nutzer auch die Möglichkeit geben möchten, ein neues Dokument zu erstellen, 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 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. Ihre App erhält dann den URI-Speicherort, an dem sie das neue Dokument schreiben kann.

Während der Intent, der von der Aktion ACTION_GET_CONTENT an Ihre onActivityResult()-Methode übergeben wird, einen URI eines beliebigen Typs zurückgeben kann, wird im Ergebnis-Intent von ACTION_OPEN_DOCUMENT und ACTION_CREATE_DOCUMENT die ausgewählte Datei immer als content:-URI angegeben, der von einem DocumentsProvider unterstützt wird. Sie können die Datei mit openFileDescriptor() öffnen und 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 direkt öffnen und bearbeiten möchten.

Sie können dem Nutzer auch die Möglichkeit geben, mehrere Dateien auszuwählen. Fügen Sie dazu dem Intent EXTRA_ALLOW_MULTIPLE hinzu und legen Sie den Wert auf true fest. Wenn der Nutzer nur ein Element auswählt, können Sie das Element aus getData() abrufen. Wenn der Nutzer mehr als ein Element auswählt, gibt getData() „null“ zurück. In diesem Fall müssen Sie jedes Element aus einem ClipData-Objekt abrufen, das von getClipData() zurückgegeben wird.

Hinweis:Der Intent muss einen MIME-Typ angeben und die Kategorie CATEGORY_OPENABLE deklarieren. Bei Bedarf können Sie mehrere MIME-Typen angeben, indem Sie ein Array von MIME-Typen mit dem Extra EXTRA_MIME_TYPES hinzufügen. In diesem Fall müssen Sie den primären MIME-Typ in setType() auf "*/*" festlegen.

Aktion
ACTION_OPEN_DOCUMENT oder
ACTION_CREATE_DOCUMENT
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 App anfordert. Wenn Sie dieses Extra verwenden, müssen Sie den primären MIME-Typ in setType() auf "*/*" festlegen.
EXTRA_ALLOW_MULTIPLE
Ein boolescher Wert, der angibt, ob der Nutzer mehrere Dateien gleichzeitig auswählen kann.
EXTRA_TITLE
Zur Verwendung mit ACTION_CREATE_DOCUMENT, um einen anfänglichen Dateinamen anzugeben.
EXTRA_LOCAL_ONLY
Ein boolescher Wert, der angibt, ob die zurückgegebene Datei direkt auf dem Gerät verfügbar sein muss, anstatt von einem Remotedienst heruntergeladen werden zu müssen.
Kategorie
CATEGORY_OPENABLE
Um nur „öffenbare“ Dateien zurückzugeben, die als Dateistream mit openFileDescriptor() 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 von verschiedenen Apps verfügbar sind, in einer einheitlichen Benutzeroberfläche an.

Wenn Sie die Dateien Ihrer App in dieser Benutzeroberfläche bereitstellen und anderen Apps das Öffnen dieser Dateien ermöglichen möchten, müssen Sie 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 die von Ihrer App verwalteten Dateien in anderen Apps öffnen können, finden Sie unter Dateien mit Storage Access Framework öffnen.

Lokale Aktionen

Ein Auto zu rufen, ist eine gängige lokale Aktion. Erstelle einen Intent-Filter, um die Fähigkeit deiner App, diese Aktion auszuführen, mithilfe der Informationen im folgenden Abschnitt zu bewerben.

Taxi bestellen

Google Sprachbedienung

  • „Ruf mir ein Taxi“
  • „Ruf mir ein Taxi“

(nur Wear OS)

Verwenden Sie die Aktion ACTION_RESERVE_TAXI_RESERVATION, um ein Taxi zu rufen.

Hinweis:Apps müssen die Bestätigung des Nutzers einholen, bevor sie diese Aktion ausführen.

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

Das Anzeigen 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
Daten-URI-Schema
geo:latitude,longitude
Karte mit dem angegebenen Längen- und Breitengrad anzeigen.

Beispiel: "geo:47.6,-122.3"

geo:latitude,longitude?z=zoom
Karte mit dem angegebenen Längen- und Breitengrad und einer bestimmten Zoomstufe anzeigen. Bei einer Zoomstufe von 1 wird die gesamte Erde angezeigt, zentriert auf die angegebenen Werte für lat und lng. Die höchste (nächste) Zoomstufe ist 23.

Beispiel: "geo:47.6,-122.3?z=11"

geo:0,0?q=lat,lng(label)
Karte mit dem angegebenen Längen- und Breitengrad und einem Stringlabel 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 eine Suchanfrage nach einem Ort sein.

Beispiel: "geo:0,0?q=1600+Amphitheatre+Parkway%2C+CA"

Hinweis: Alle Strings, die im geo-URI übergeben werden, müssen codiert sein. Der String 1st & Pike, Seattle wird beispielsweise zu 1st%20%26%20Pike%2C%20Seattle. Leerzeichen im String werden mit %20 codiert oder durch ein 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 abspielen

Wenn du eine Musikdatei abspielen möchtest, verwende die Aktion ACTION_VIEW und gib 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

Google Sprachbedienung

  • „Spiel Billie Jean von Michael Jackson“

Wenn du Musik basierend auf einer Suchanfrage abspielen möchtest, verwende den Intent INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH. 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 Suchanfrage abzugleichen, und startet die Wiedergabe dieser Inhalte.

Fügen Sie in diesen Intent das String-Extra EXTRA_MEDIA_FOCUS ein, das den gewünschten Suchmodus angibt. Im Suchmodus kann beispielsweise angegeben werden, ob nach einem Künstlernamen oder einem Songnamen gesucht wird.

Aktion
INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH
Daten-URI-Schema
Keine
MIME-Typ
Keine
Extras
MediaStore.EXTRA_MEDIA_FOCUS (erforderlich)

Gibt den Suchmodus an: ob der Nutzer nach einem bestimmten Künstler, Album, Song oder einer bestimmten Playlist sucht. Für die meisten Suchmodi sind zusätzliche Extras erforderlich. Wenn der Nutzer beispielsweise einen bestimmten Song hören möchte, kann der Intent drei zusätzliche Extras enthalten: den Songtitel, den Künstler und das Album. Dieser Intent unterstützt die folgenden Suchmodi für jeden Wert von EXTRA_MEDIA_FOCUS:

Beliebig – "vnd.android.cursor.item/*"

Beliebige Musik abspielen Die Empfänger-App spielt Musik basierend auf einer intelligenten Auswahl ab, z. B. die letzte Playlist, die der Nutzer angehört hat.

Zusätzliche Extras:

  • QUERY (erforderlich): ein leerer String. Dieses Extra wird immer zur Abwärtskompatibilität bereitgestellt. Vorhandene Apps, die keine Suchmodi kennen, können diesen Intent als unstrukturierte Suche verarbeiten.

Unstrukturiert: "vnd.android.cursor.item/*"

Einen bestimmten Song, ein bestimmtes Album oder ein bestimmtes Genre über eine unstrukturierte Suchanfrage abspielen. Apps können mit diesem Suchmodus einen Intent generieren, wenn sie den Typ des Inhalts, den der Nutzer hören möchte, nicht identifizieren können. Verwenden Sie nach Möglichkeit spezifischere Suchmodi.

Zusätzliche Extras:

  • QUERY (erforderlich): Ein String, der eine beliebige Kombination aus Künstler, Album, Songname oder Genre enthält.

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 immer zur Abwärtskompatibilität bereitgestellt. Vorhandene Apps, die keine Suchmodi 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 immer zur Abwärtskompatibilität bereitgestellt. Vorhandene Apps, die keine Suchmodi 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 Album.
  • EXTRA_MEDIA_ARTIST: der Künstler.
  • "android.intent.extra.genre": das Genre.
  • QUERY (erforderlich): Ein String, der eine beliebige Kombination aus Album und Künstler enthält. Dieses Extra wird immer zur Abwärtskompatibilität bereitgestellt. Vorhandene Apps, die keine Suchmodi kennen, können diesen Intent als unstrukturierte Suche verarbeiten.

Song – "vnd.android.cursor.item/audio"

Einen bestimmten Song abspielen

Zusätzliche Extras:

  • EXTRA_MEDIA_ALBUM: das Album.
  • EXTRA_MEDIA_ARTIST: der Künstler.
  • "android.intent.extra.genre": das Genre.
  • EXTRA_MEDIA_TITLE (erforderlich): der Name des Songs.
  • QUERY (erforderlich): Ein String, der eine beliebige Kombination aus Album, Künstler, Genre oder Titel enthält. Dieses Extra wird immer für die Abwärtskompatibilität bereitgestellt. Vorhandene Apps, die keine Suchmodi kennen, können diesen Intent als unstrukturierte Suche verarbeiten.

Playlist – Audio.Playlists.ENTRY_CONTENT_TYPE

Eine bestimmte Playlist oder eine Playlist abspielen, die bestimmten Kriterien entspricht, die durch zusätzliche Extras angegeben werden.

Zusätzliche Extras:

  • EXTRA_MEDIA_ALBUM: das Album.
  • EXTRA_MEDIA_ARTIST: der Künstler.
  • "android.intent.extra.genre": das Genre.
  • "android.intent.extra.playlist": die Playlist.
  • EXTRA_MEDIA_TITLE: der 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. Dieses Extra wird immer zur Abwärtskompatibilität bereitgestellt. Vorhandene Apps, die keine Suchmodi kennen, können diesen Intent als unstrukturierte Suche verarbeiten.

Beispiel-Intent:

Wenn der Nutzer Musik von einem bestimmten Künstler hören möchte, kann eine Such-App den folgenden Intent generieren:

Kotlin

fun playSearchArtist(artist: String) {
    val intent = Intent(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH).apply {
        putExtra(MediaStore.EXTRA_MEDIA_FOCUS, MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE)
        putExtra(MediaStore.EXTRA_MEDIA_ARTIST, artist)
        putExtra(SearchManager.QUERY, artist)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

public void playSearchArtist(String artist) {
    Intent intent = new Intent(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH);
    intent.putExtra(MediaStore.EXTRA_MEDIA_FOCUS,
                    MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE);
    intent.putExtra(MediaStore.EXTRA_MEDIA_ARTIST, artist);
    intent.putExtra(SearchManager.QUERY, artist);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

Beispiel für 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 du diesen Intent in deiner Aktivität verarbeitest, prüfe den Wert des Extras 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 Suchmodus. Anhand dieser Informationen kann deine App dann in ihrem Inventar nach den Inhalten suchen, die der Suchanfrage entsprechen, und diese abspielen. Dies wird im folgenden Beispiel veranschaulicht.

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
    ...
    if (intent.action.compareTo(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH) == 0) {

        val mediaFocus: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_FOCUS)
        val query: String? = intent.getStringExtra(SearchManager.QUERY)

        // Some of these extras might not be available depending on the search mode.
        val album: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ALBUM)
        val artist: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ARTIST)
        val genre: String? = intent.getStringExtra("android.intent.extra.genre")
        val playlist: String? = intent.getStringExtra("android.intent.extra.playlist")
        val title: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_TITLE)

        // Determine the search mode and use the corresponding extras.
        when {
            mediaFocus == null -> {
                // 'Unstructured' search mode (backward compatible)
                playUnstructuredSearch(query)
            }
            mediaFocus.compareTo("vnd.android.cursor.item/*") == 0 -> {
                if (query?.isNotEmpty() == true) {
                    // 'Unstructured' search mode.
                    playUnstructuredSearch(query)
                } else {
                    // 'Any' search mode.
                    playResumeLastPlaylist()
                }
            }
            mediaFocus.compareTo(MediaStore.Audio.Genres.ENTRY_CONTENT_TYPE) == 0 -> {
                // 'Genre' search mode.
                playGenre(genre)
            }
            mediaFocus.compareTo(MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE) == 0 -> {
                // 'Artist' search mode.
                playArtist(artist, genre)
            }
            mediaFocus.compareTo(MediaStore.Audio.Albums.ENTRY_CONTENT_TYPE) == 0 -> {
                // 'Album' search mode.
                playAlbum(album, artist)
            }
            mediaFocus.compareTo("vnd.android.cursor.item/audio") == 0 -> {
                // 'Song' search mode.
                playSong(album, artist, genre, title)
            }
            mediaFocus.compareTo(MediaStore.Audio.Playlists.ENTRY_CONTENT_TYPE) == 0 -> {
                // 'Playlist' search mode.
                playPlaylist(album, artist, genre, playlist, title)
            }
        }
    }
}

Java

protected void onCreate(Bundle savedInstanceState) {
    //...
    Intent intent = this.getIntent();
    if (intent.getAction().compareTo(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH) == 0) {

        String mediaFocus = intent.getStringExtra(MediaStore.EXTRA_MEDIA_FOCUS);
        String query = intent.getStringExtra(SearchManager.QUERY);

        // Some of these extras might not be available depending on the search mode.
        String album = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ALBUM);
        String artist = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ARTIST);
        String genre = intent.getStringExtra("android.intent.extra.genre");
        String playlist = intent.getStringExtra("android.intent.extra.playlist");
        String title = intent.getStringExtra(MediaStore.EXTRA_MEDIA_TITLE);

        // Determine the search mode and use the corresponding extras.
        if (mediaFocus == null) {
            // 'Unstructured' search mode (backward compatible).
            playUnstructuredSearch(query);

        } else if (mediaFocus.compareTo("vnd.android.cursor.item/*") == 0) {
            if (query.isEmpty()) {
                // 'Any' search mode.
                playResumeLastPlaylist();
            } else {
                // 'Unstructured' search mode.
                playUnstructuredSearch(query);
            }

        } else if (mediaFocus.compareTo(MediaStore.Audio.Genres.ENTRY_CONTENT_TYPE) == 0) {
            // 'Genre' search mode.
            playGenre(genre);

        } else if (mediaFocus.compareTo(MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE) == 0) {
            // 'Artist' search mode.
            playArtist(artist, genre);

        } else if (mediaFocus.compareTo(MediaStore.Audio.Albums.ENTRY_CONTENT_TYPE) == 0) {
            // 'Album' search mode.
            playAlbum(album, artist);

        } else if (mediaFocus.compareTo("vnd.android.cursor.item/audio") == 0) {
            // 'Song' search mode.
            playSong(album, artist, genre, title);

        } else if (mediaFocus.compareTo(MediaStore.Audio.Playlists.ENTRY_CONTENT_TYPE) == 0) {
            // 'Playlist' search mode.
            playPlaylist(album, artist, genre, playlist, title);
        }
    }
}

Neue Notiz

Das Erstellen einer Notiz ist eine gängige Aktion für Notizen-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

Wenn Sie eine neue Notiz erstellen möchten, verwenden Sie die Aktion ACTION_CREATE_NOTE und geben Sie Details zur Notiz wie Betreff und Text mit den folgenden Extras an.

Hinweis:Apps müssen die Bestätigung des Nutzers einholen, bevor sie diese Aktion ausführen.

Aktion
ACTION_CREATE_NOTE
Daten-URI-Schema
Keine
MIME-Typ
PLAIN_TEXT_TYPE
"*/*"
Extras
EXTRA_NAME
Ein String, der den Titel oder das Thema der Notiz angibt.
EXTRA_TEXT
Ein String, der den Text der Notiz angibt.

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>

Telefon

Das Initiieren eines Anrufs ist eine gängige Aktion für Telefon-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 du die Telefon App öffnen und eine Telefonnummer wählen möchtest, verwende die Aktion ACTION_DIAL und gib eine Telefonnummer mit dem folgenden URI-Schema 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.

Google Sprachbedienung

  • „Ruf 555-5555 an“
  • „Ruf Bob an“
  • „Mailbox anrufen“

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 den Button Anrufen tippen.

Für die Aktion ACTION_CALL muss die Berechtigung CALL_PHONE in die Manifestdatei aufgenommen werden:

<uses-permission android:name="android.permission.CALL_PHONE" />
Aktion
  • ACTION_DIAL – Öffnet die Telefon App.
  • ACTION_CALL: Tätigt einen Anruf (erfordert die Berechtigung CALL_PHONE)
Daten-URI-Schema
  • tel:<phone-number>
  • voicemail:<phone-number>
MIME-Typ
Keine

Gültige Telefonnummern sind in IETF RFC 3966 definiert. Gültige Beispiele:

  • tel:2125551212
  • tel:(212) 555 1212

Die Telefon App kann Schemas wie Telefonnummern gut normalisieren. Das beschriebene Schema ist also in der Methode Uri.parse() nicht unbedingt erforderlich. Wenn Sie ein Schema noch nicht ausprobiert haben oder sich 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);
    }
}

Im Folgenden sind gängige Aktionen für Such-Apps aufgeführt, 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.

Mit einer bestimmten App suchen

Google Sprachbedienung

  • „Suche nach Katzenvideos in meiner Video-App“

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 gezeigt.

Hinweis: Wir empfehlen, SEARCH_ACTION nicht 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 finden Sie in der Google Assistant-Dokumentation zu App-Aktionen.

Aktion
"com.google.android.gms.actions.SEARCH_ACTION"
Unterstützung von Suchanfragen über Google-Sprachbefehle
Extras
QUERY
Ein String, der die Suchanfrage enthält.

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 durchführen

Wenn du eine Websuche starten möchtest, verwende die Aktion ACTION_WEB_SEARCH und gib den Suchstring im Extra SearchManager.QUERY an.

Aktion
ACTION_WEB_SEARCH
Daten-URI-Schema
Keine
MIME-Typ
Keine
Extras
SearchManager.QUERY
Der Suchstring.

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

Wenn der Nutzer in deiner App etwas ändern muss, kannst du einen Bildschirm in der App „Einstellungen“ mit einer der folgenden Intent-Aktionen öffnen:

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 Dokumentation zu Settings .

Daten-URI-Schema
Keine
MIME-Typ
Keine

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

Das Verfassen einer SMS/MMS-Nachricht mit einem Anhang ist eine gängige Aktion für 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 verfassen

Wenn du eine SMS oder MMS senden möchtest, verwende eine der folgenden Intent-Aktionen und gib Nachrichtendetails wie Telefonnummer, Betreff und Inhalt der Nachricht mit den folgenden zusätzlichen Schlüsseln an.

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 auf dieselbe Weise 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 Nachricht.
EXTRA_STREAM
Ein Uri, der auf das anzuhängende Bild oder Video verweist. Wenn Sie die Aktion ACTION_SEND_MULTIPLE verwenden, ist dieses Extra ein ArrayList von Uri-Objekten, die auf die anzuhängenden Bilder oder Videos verweisen.

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 du sichergehen möchtest, dass dein Intent nur von einer Messaging-App und nicht von anderen E-Mail- oder Social-Apps verarbeitet wird, verwende die Aktion ACTION_SENDTO und füge 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 du eine SMS/MMS-Messaging-App entwickelst, musst du Intent-Filter für mehrere zusätzliche Aktionen implementieren, damit sie unter Android 4.4 und höher als Standard-SMS-App verfügbar ist. Weitere Informationen finden Sie in der Dokumentation unter Telephony.

Webbrowser

Das Laden einer Web-URL ist eine gängige Aktion für Webbrowser-Apps. Erstellen Sie einen Intent-Filter, um die Fähigkeit Ihrer App zur Ausführung dieser Aktion zu bewerben. Verwenden Sie dazu die Informationen im folgenden Abschnitt.

Web-URL laden

Google Sprachbedienung

  • „Öffne beispiel.de“

Wenn Sie eine Webseite öffnen möchten, verwenden Sie die Aktion ACTION_VIEW und geben Sie die Web-URL in den Intent-Daten an.

Aktion
ACTION_VIEW
Daten-URI-Schema
http:<URL>
https:<URL>
MIME-Typ
"text/plain"
"text/html"
"application/xhtml+xml"
"application/vnd.wap.xhtml+xml"

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 Ihre App installiert haben, werden Links aus E-Mails oder von anderen Webseiten, die auf Ihre Website verweisen, in Ihrer Android-App statt auf Ihrer Webseite geöffnet. Weitere Informationen finden Sie unter Umgang mit Android-App-Links.

Ab Android 12 (API-Level 31) wird ein allgemeiner Web-Intent nur dann in eine Aktivität in Ihrer App aufgelöst, wenn Ihre App für die im Web-Intent enthaltene Domain genehmigt ist. Wenn Ihre App nicht für die Domain genehmigt wurde, wird der Web-Intent stattdessen in der Standardbrowser-App des Nutzers aufgelöst.

Intents mit der Android Debug Bridge prüfen

Wenn Sie prüfen möchten, ob Ihre App auf die Intents reagiert, die Sie unterstützen möchten, können Sie mit dem adb-Tool bestimmte Intents auslösen. Gehen Sie dazu so vor:

  1. Richten Sie ein Android-Gerät für die Entwicklung ein oder verwenden Sie ein virtuelles Gerät.
  2. Installiere eine Version deiner App, die die Intents verarbeitet, die du unterstützen möchtest.
  3. Lösen Sie einen Intent mit adb aus:
    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
    
  4. Wenn Sie die erforderlichen Intent-Filter definieren, verarbeiten Sie den Intent.

Weitere Informationen finden Sie unter Shell-Befehle ausführen.