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 auszuführende Aktion, z. B. „Karte ansehen“ oder „Bild aufnehmen“. Diese Art von Intent wird als impliziter Intent bezeichnet, weil dabei nicht die zu startende App-Komponente angegeben wird, sondern eine Aktion definiert und einige Daten zur Ausführung der Aktion bereitgestellt werden.

Wenn Sie startActivity() oder startActivityForResult() aufrufen und einen impliziten Intent übergeben, löst das System den Intent in eine Anwendung 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 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 Typ der Anwendung sortiert, die den Intent verarbeitet. In jedem Abschnitt wird auch beschrieben, 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() für das Intent-Objekt auf. Wenn das Ergebnis nicht null ist, gibt es mindestens eine Anwendung, die den Intent verarbeiten kann. Der Aufruf von startActivity() ist bedenkenlos. Wenn das Ergebnis null ist, verwenden Sie den Intent nicht und deaktivieren Sie nach Möglichkeit das Feature, das den Intent aufruft.

Wenn Sie mit dem Erstellen von Intents oder Intent-Filtern nicht vertraut sind, lesen Sie zuerst Intents und Intent-Filter.

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

Google-Sprachbedienung

Die Google-Sprachbedienung löst als Reaktion auf Sprachbefehle einige der auf dieser Seite aufgeführten Intents aus. Weitere Informationen findest du unter Erste Schritte mit der Sprachbedienung des Systems.

Wecker

Im Folgenden finden Sie häufige Aktionen für Wecker-Apps. Dazu gehören die 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

Google-Sprachbedienung

  • „Stell einen Wecker für 7 Uhr“

Wenn du einen neuen Alarm erstellen möchtest, verwende die Aktion ACTION_SET_ALARM und gib mithilfe der folgenden Extras Alarmdetails wie die Uhrzeit und die Nachricht an.

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

Aktion
ACTION_SET_ALARM
Daten-URI
Keine
MIME-Typ
Keine
Weitere Funktionen
EXTRA_HOUR
Die Stunde des Weckers.
EXTRA_MINUTES
Die Minuten, in denen der Wecker klingelt.
EXTRA_MESSAGE
Eine benutzerdefinierte Nachricht zur Identifizierung des Alarms.
EXTRA_DAYS
Eine ArrayList mit jedem Wochentag, an dem sich dieser Wecker wiederholt. Jeder Tag muss mit einer Ganzzahl aus der Klasse Calendar deklariert werden, z. B. MONDAY.

Für einen einmaligen Alarm solltest du dies nicht zusätzlich angeben.

EXTRA_RINGTONE
Ein content:-URI, der einen Klingelton für den Wecker angibt, oder VALUE_RINGTONE_SILENT, wenn kein Klingelton verwendet werden soll.

Wenn Sie den Standardklingelton verwenden möchten, geben Sie dies nicht zusätzlich an.

EXTRA_VIBRATE
Ein boolescher Wert, der angibt, ob bei diesem Wecker vibrieren soll.
EXTRA_SKIP_UI
Ein boolescher Wert, der angibt, ob die antwortende App beim Einstellen des Alarms ihre UI überspringen muss. Falls wahr, muss die App jede Bestätigungs-UI umgehen und den angegebenen Alarm einstellen.

Beispiel für einen 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:

Zum Aufrufen des Intents ACTION_SET_ALARM muss Ihre App die Berechtigung SET_ALARM haben:

<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />

Beispiel für Intent-Filter:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.SET_ALARM" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Timer erstellen

Google-Sprachbedienung

  • „Stell den Timer auf 5 Minuten“

Verwenden Sie zum Erstellen eines Countdown-Timers die Aktion ACTION_SET_TIMER und geben Sie 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
Weitere Funktionen
EXTRA_LENGTH
Die Länge des Timers in Sekunden.
EXTRA_MESSAGE
Eine benutzerdefinierte Nachricht zur Identifizierung des Timers.
EXTRA_SKIP_UI
Ein boolescher Wert, der angibt, ob die antwortende App beim Einstellen des Timers ihre UI überspringen muss. Falls wahr, muss die App jede Bestätigungs-UI umgehen und den angegebenen Timer starten.

Beispiel für einen 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:

Zum Aufrufen des Intents ACTION_SET_TIMER muss Ihre App die Berechtigung SET_ALARM haben:

<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />

Beispiel für Intent-Filter:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.SET_TIMER" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Alle Weckzeiten anzeigen

Um die Liste der Alarme aufzurufen, verwende die Aktion ACTION_SHOW_ALARMS.

Obwohl nicht viele Apps diesen Intent aufrufen, wird er hauptsächlich von System-Apps verwendet. Jede App, die sich als Wecker verhält, kann diesen Intent-Filter implementieren und als Antwort die Liste der aktuellen Alarme 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 Intent-Filter:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.SHOW_ALARMS" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Kalender

Das Hinzufügen eines Termins ist eine gängige Aktion in Kalender-Apps. Erstellen Sie einen Intent-Filter, um anzugeben, dass Ihre App diese Aktion ausführen kann. Verwenden Sie dazu die Informationen im folgenden Abschnitt.

Kalendertermin hinzufügen

Wenn Sie dem Kalender des Nutzers ein neues Ereignis hinzufügen möchten, verwenden Sie die Aktion ACTION_INSERT und geben Sie den Daten-URI mit Events.CONTENT_URI an. 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"
Weitere Funktionen
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 Epoche).
EXTRA_EVENT_END_TIME
Die Endzeit des Ereignisses (Millisekunden seit Epoche).
TITLE
Der Titel des Termins.
DESCRIPTION
Beschreibung des Termins
EVENT_LOCATION
Der Veranstaltungsort.
EXTRA_EMAIL
Eine durch Kommas getrennte Liste mit E-Mail-Adressen der eingeladenen Personen.

Mit den in der Klasse CalendarContract.EventsColumns definierten Konstanten können viele weitere Ereignisdetails angegeben werden.

Beispiel für einen 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 Intent-Filter:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.INSERT" />
        <data android:mimeType="vnd.android.cursor.dir/event" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Kamera

Im Folgenden finden Sie häufige Aktionen für Kamera-Apps. Dazu gehören die Informationen, die Sie zum Erstellen eines Intent-Filters benötigen, um die Fähigkeit Ihrer App zum Ausführen der einzelnen Aktionen zu bewerben.

Ein Bild oder Video aufnehmen und zurückgeben

Wenn Sie eine Kamera-App öffnen und das aufgenommene Foto oder Video empfangen möchten, verwenden Sie die Aktion ACTION_IMAGE_CAPTURE oder ACTION_VIDEO_CAPTURE. Geben Sie im zusätzlichen EXTRA_OUTPUT auch 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
Weitere Funktionen
EXTRA_OUTPUT
Der URI-Speicherort, an dem die Kamera-App das Foto oder die Videodatei speichert (als Uri-Objekt).

Wenn die Kamera-App den Fokus wieder auf Ihre Aktivität zurückkehrt, also wenn die App den onActivityResult()-Callback empfängt, können Sie unter dem URI, den Sie mit dem Wert EXTRA_OUTPUT angegeben haben, auf das Foto oder Video zugreifen.

Hinweis:Wenn Sie ACTION_IMAGE_CAPTURE für die Aufnahme eines Fotos verwenden, gibt die Kamera möglicherweise auch eine verkleinerte Kopie oder Miniaturansicht des Fotos im Ergebnis-Intent zurück, die als Bitmap in einem zusätzlichen Feld mit dem Namen "data" gespeichert ist.

Beispiel für einen 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 unter Android 12 (API-Level 31) oder höher arbeiten, sehen Sie sich dazu das folgende Intent-Beispiel an.

Beispiel für einen 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 zum Aufnehmen von Fotos mit diesem Intent und zum Erstellen einer geeigneten Uri für den Ausgabeort finden Sie unter Fotos aufnehmen oder Videos aufnehmen.

Beispiel für Intent-Filter:

<activity ...>
    <intent-filter>
        <action android:name="android.media.action.IMAGE_CAPTURE" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Lassen Sie bei der Verarbeitung dieses Intents Ihre Aktivitäten auf das Extra EXTRA_OUTPUT im eingehenden Intent prüfen, speichern Sie dann das aufgenommene Bild oder Video an dem durch dieses Extrahier angegebenen Speicherort und rufen Sie setResult() mit einem Intent auf, das eine komprimierte Miniaturansicht in einem Extra namens "data" enthält.

Kamera-App im Standbildmodus starten

Google-Sprachbedienung

  • "Mach ein Foto"

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

Aktion
INTENT_ACTION_STILL_IMAGE_CAMERA
Daten-URI-Schema
Keine
MIME-Typ
Keine
Weitere Funktionen
Keine

Beispiel für einen 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 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

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
Weitere Funktionen
Keine

Beispiel für einen 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 Intent-Filter:

<activity ...>
    <intent-filter>
        <action android:name="android.media.action.VIDEO_CAMERA" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Kontakte-App

Im Folgenden finden Sie häufige Aktionen für Apps zur Kontaktverwaltung, einschließlich der Informationen, die Sie zum Erstellen eines Intent-Filters benötigen, um die Fähigkeit Ihrer App zum Ausführen 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 als MIME-Typ Contacts.CONTENT_TYPE an.

Das Ergebnis Intent, das an Ihren onActivityResult()-Callback gesendet wurde, enthält den content:-URI, der auf den ausgewählten Kontakt verweist. Durch die Antwort wird Ihrer App temporäre Berechtigungen gewährt, diesen Kontakt über die 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üssen, finden Sie im nächsten Abschnitt Informationen zur Auswahl bestimmter Kontaktdaten.

Aktion
ACTION_PICK
Daten-URI-Schema
Keine
MIME-Typ
Contacts.CONTENT_TYPE

Beispiel für einen 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 dieses Kontakts zu lesen, z. B. den Anzeigenamen und ob der Kontakt markiert ist. Wenn Sie jedoch genauere Daten über einen bestimmten Kontakt abrufen möchten, z. B. seine Telefonnummer oder E-Mail-Adresse, benötigen Sie die Berechtigung READ_CONTACTS.

Bestimmte Kontaktdaten auswählen

Wenn der Nutzer eine bestimmte Information aus einem Kontakt auswählen soll, z. B. eine Telefonnummer, eine 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 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 von Contacts.CONTENT_TYPE, wie im vorherigen Abschnitt gezeigt. Das Ergebnis bietet Ihnen direkten Zugriff auf die gewünschten Daten, ohne dass Sie eine komplexere Abfrage an den Contacts Provider ausführen müssen.

Das Ergebnis Intent, das an Ihren onActivityResult()-Callback gesendet wurde, enthält den content:-URI, der auf die ausgewählten Kontaktdaten verweist. Durch die Antwort wird 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 mit einer Telefonnummer aus.
CommonDataKinds.Email.CONTENT_TYPE
Wählen Sie Kontakte mit einer E-Mail-Adresse aus.
CommonDataKinds.StructuredPostal.CONTENT_TYPE
Sie können Kontakte mit Postanschrift auswählen.

Oder einer von vielen anderen CONTENT_TYPE-Werten unter ContactsContract.

Beispiel für einen 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

Zum Aufrufen der Details zu einem bekannten Kontakt verwenden Sie die Aktion ACTION_VIEW und geben den Kontakt mit einem content:-URI als Intent-Daten an.

Es gibt zwei primäre Möglichkeiten, den URI des Kontakts anfänglich abzurufen:

  • Verwenden Sie den Kontakt-URI, der von der Aktion ACTION_PICK zurückgegeben wird, wie im vorherigen Abschnitt beschrieben. Für diesen Ansatz sind keine App-Berechtigungen erforderlich.
  • Greifen Sie wie unter Kontaktliste abrufen beschrieben direkt auf die Liste aller Kontakte zu. 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 der Kontakt-URI abgeleitet.

Beispiel für einen 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

Verwenden Sie zum Bearbeiten eines bekannten Kontakts die Aktion ACTION_EDIT, geben Sie den Kontakt mit einem content:-URI als Intent-Daten an und fügen Sie alle bekannten Kontaktinformationen in Extras ein, die durch Konstanten in ContactsContract.Intents.Insert angegeben werden.

Es gibt zwei primäre Möglichkeiten, den Kontakt-URI anfänglich abzurufen:

  • Verwenden Sie den Kontakt-URI, der von der Aktion ACTION_PICK zurückgegeben wird, wie im vorherigen Abschnitt beschrieben. Für diesen Ansatz sind keine App-Berechtigungen erforderlich.
  • Greifen Sie wie unter Kontaktliste abrufen beschrieben direkt auf die Liste aller Kontakte zu. Für diesen Ansatz ist die Berechtigung READ_CONTACTS erforderlich.
Aktion
ACTION_EDIT
Daten-URI-Schema
content:<URI>
MIME-Typ
Der Typ wird aus der Kontakt-URI abgeleitet.
Weitere Funktionen
Eines oder mehrere der in ContactsContract.Intents.Insert definierten Extras, damit Sie Felder mit Kontaktdaten füllen können.

Beispiel für einen 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.

Kontakte 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 ein, die durch Konstanten in ContactsContract.Intents.Insert angegeben werden.

Aktion
ACTION_INSERT
Daten-URI-Schema
Keine
MIME-Typ
Contacts.CONTENT_TYPE
Weitere Funktionen
Mindestens eines der in ContactsContract.Intents.Insert definierten Extras.

Beispiel für einen 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 von E-Mails mit optionalen Anhängen ist eine gängige Aktion in E-Mail-Apps. Erstellen Sie einen Intent-Filter, um anzugeben, dass Ihre App diese Aktion ausführen kann. Verwenden Sie dazu die Informationen im folgenden Abschnitt.

E-Mail mit optionalen Anhängen verfassen

Verwenden Sie zum Schreiben einer E-Mail eine der folgenden Aktionen, je nachdem, ob Sie Anhänge hinzufügen möchten oder nicht. Fügen Sie mithilfe der zusätzlichen aufgeführten Schlüssel E-Mail-Details wie Empfänger und Betreff 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"
"*/*"
Weitere Funktionen
Intent.EXTRA_EMAIL
Ein String-Array mit allen „An“-Empfänger-E-Mail-Adressen.
Intent.EXTRA_CC
Ein String-Array mit allen E-Mail-Adressen von Empfängern in „Cc“.
Intent.EXTRA_BCC
Ein String-Array mit allen E-Mail-Adressen von Empfängern im Feld „Bcc“.
Intent.EXTRA_SUBJECT
Ein String mit dem Betreff der E-Mail.
Intent.EXTRA_TEXT
Ein String mit dem Text der E-Mail-Adresse.
Intent.EXTRA_STREAM
Ein Uri, der auf den Anhang verweist. Wenn Sie die Aktion ACTION_SEND_MULTIPLE verwenden, ist dies ein ArrayList mit mehreren Uri-Objekten.

Beispiel für einen 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 sicherstellen möchten, dass Ihr Intent nur von einer E-Mail-App und nicht von einer SMS- oder Social-Media-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 Intent-Filter:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <data android:type="*/*" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.SENDTO" />
        <data android:scheme="mailto" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Dateispeicher

Im Folgenden finden Sie häufige Aktionen für Dateispeicheranwendungen, 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.

Bestimmten Dateityp abrufen

Wenn der Nutzer eine Datei wie ein Dokument oder ein Foto auswählen und einen Verweis an 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 gilt 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 können Nutzer auch eine neue Datei erstellen. Anstatt beispielsweise ein vorhandenes Foto auszuwählen, kann der Nutzer mit der Kamera ein neues Foto aufnehmen.

Der an Ihre onActivityResult()-Methode übermittelte Ergebnis-Intent enthält Daten mit einem URI, der auf die Datei verweist. Der URI kann ein beliebiger URI sein, z. B. http:-URI, file:-URI oder content:-URI. Wenn Sie auswählbare Dateien jedoch auf die Dateien beschränken möchten, auf die über einen Contentanbieter (ein content:-URI) zugegriffen werden kann und die mit openFileDescriptor() als Dateistream verfügbar sind, fügen Sie Ihrem Intent die Kategorie CATEGORY_OPENABLE hinzu.

Unter Android 4.3 (API-Level 18) und höher können Sie dem Nutzer auch mehrere Dateien auswählen lassen. Dazu fügen Sie dem Intent EXTRA_ALLOW_MULTIPLE hinzu und setzen Sie diesen auf true. Sie können dann auf jede der ausgewählten Dateien in einem ClipData-Objekt zugreifen, das von getClipData() zurückgegeben wird.

Aktion
ACTION_GET_CONTENT
Daten-URI-Schema
Keine
MIME-Typ
Der MIME-Typ, der dem Dateityp entspricht, den der Nutzer auswählen muss.
Weitere Funktionen
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 und kein Download von einem Remote-Dienst erforderlich ist.
Kategorie (optional)
CATEGORY_OPENABLE
Nur „Openable“-Dateien zurückgeben, die als Dateistream mit openFileDescriptor() dargestellt werden können.

Beispiel für einen 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 zum Zurückgeben eines Fotos:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.GET_CONTENT" />
        <data android:type="image/*" />
        <category android:name="android.intent.category.DEFAULT" />
        <!-- The OPENABLE category declares that the returned file is accessible
             from a content provider that supports OpenableColumns
             and ContentResolver.openFileDescriptor(). -->
        <category android:name="android.intent.category.OPENABLE" />
    </intent-filter>
</activity>

Einen bestimmten Dateityp öffnen

Statt eine Kopie einer Datei abzurufen, die Sie in Ihre App importieren müssen, können Sie unter Android 4.4 oder höher mithilfe 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. Verwenden Sie stattdessen die Aktion ACTION_CREATE_DOCUMENT, damit der Nutzer auch ein neues Dokument erstellen kann, in das Ihre App schreiben kann.

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 Anwendung, die den Speicher des Dokuments verwaltet. Ihre Anwendung empfängt dann den URI-Speicherort, an den das neue Dokument geschrieben werden kann.

Während der Intent, der von der ACTION_GET_CONTENT-Aktion an die Methode onActivityResult() übergeben 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 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 der Anwendung zu erstellen, oder wenn Sie eine Datei direkt öffnen und bearbeiten möchten.

Sie können dem Nutzer auch erlauben, mehrere Dateien auszuwählen. Dazu fügen Sie dem Intent EXTRA_ALLOW_MULTIPLE hinzu, der auf true gesetzt ist. Wenn der Nutzer nur ein Element auswählt, können Sie es 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:Im Intent muss ein MIME-Typ angegeben und die Kategorie CATEGORY_OPENABLE deklariert werden. Sie können gegebenenfalls mehrere MIME-Typen angeben, indem Sie ein Array von MIME-Typen mit dem Zusatz 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.
Weitere Funktionen
EXTRA_MIME_TYPES
Ein Array von MIME-Typen, die den Dateitypen entsprechen, die Ihre Anwendung anfordert. Wenn Sie diese zusätzliche Option 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
Wird mit ACTION_CREATE_DOCUMENT verwendet, 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 und kein Download von einem Remote-Dienst erforderlich ist.
Kategorie
CATEGORY_OPENABLE
Nur „Openable“-Dateien zurückgeben, die als Dateistream mit openFileDescriptor() dargestellt werden können.

Beispiel für einen 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 mit der Aktion ACTION_OPEN_DOCUMENT nicht auf einen Intent reagieren. Stattdessen empfängt das System diesen Intent und zeigt alle Dateien, die aus verschiedenen Anwendungen verfügbar sind, auf einer einheitlichen Benutzeroberfläche an.

Wenn du die Dateien deiner Anwendung über diese UI bereitstellen und anderen Apps erlauben möchtest, sie zu öffnen, musst du eine DocumentsProvider implementieren und einen Intent-Filter für PROVIDER_INTERFACE ("android.content.action.DOCUMENTS_PROVIDER") einfügen, wie im folgenden Beispiel gezeigt:

<provider ...
    android:grantUriPermissions="true"
    android:exported="true"
    android:permission="android.permission.MANAGE_DOCUMENTS">
    <intent-filter>
        <action android:name="android.content.action.DOCUMENTS_PROVIDER" />
    </intent-filter>
</provider>

Weitere Informationen dazu, wie Sie die von Ihrer App verwalteten Dateien über andere Apps öffnen können, finden Sie unter Dateien mit dem Speicherzugriffs-Framework öffnen.

Lokale Aktionen

Das Anrufen eines Autos ist eine gängige lokale Aktion. Erstellen Sie einen Intent-Filter, um anzugeben, dass Ihre App diese Aktion mithilfe der Informationen im folgenden Abschnitt ausführen kann.

Taxi rufen

Google-Sprachbedienung

  • „Hol mir ein Taxi“
  • „nenn mich ein Auto“

(nur Wear OS)

Wenn Sie ein Taxi rufen möchten, verwenden Sie die Aktion ACTION_RESERVE_TAXI_RESERVATION.

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
Weitere Funktionen
Keine

Beispiel für einen 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 Intent-Filter:

<activity ...>
    <intent-filter>
        <action android:name="com.google.android.gms.actions.RESERVE_TAXI_RESERVATION" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Maps

Die Anzeige eines Standorts auf einer Karte ist eine gängige Aktion in Karten-Apps. Erstellen Sie einen Intent-Filter, um anzugeben, dass Ihre App diese Aktion ausführen kann. Verwenden Sie dazu die Informationen im folgenden Abschnitt.

Ort 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 wird mit dem angegebenen Längen- und Breitengrad angezeigt.

Beispiel: "geo:47.6,-122.3"

geo:latitude,longitude?z=zoom
Zeigen Sie die Karte mit einem bestimmten Längen- und Breitengrad mit einer bestimmten Zoomstufe an. Bei Zoomstufe 1 ist die gesamte Erde an der angegebenen lat,lng zentriert. Die höchste Zoomstufe ist 23.

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

geo:0,0?q=lat,lng(label)
Zeigt die Karte mit einem bestimmten Längen- und Breitengrad mit einem Stringlabel an.

Beispiel: "geo:0,0?q=34.99,-106.61(Treasure)"

geo:0,0?q=my+street+address
Den Standort für „meine Adresse“ anzeigen, sowohl eine bestimmte Adresse als auch eine Standortabfrage

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

Hinweis:Alle im URI geo übergebenen Strings müssen codiert werden. Aus dem String 1st & Pike, Seattle wird beispielsweise 1st%20%26%20Pike%2C%20Seattle. Leerzeichen im String werden mit %20 codiert oder durch das Pluszeichen (+) ersetzt.

MIME-Typ
Keine

Beispiel für einen 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 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 sind gängige Aktionen für Musik- und Video-Apps aufgeführt. Dazu gehören die Informationen, die Sie zum Erstellen eines Intent-Filters benötigen, um die Fähigkeit Ihrer App zum Ausführen 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 andere, die für Ihre App erforderlich sind.

Beispiel für einen 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 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 michael jackson billie Jeans“

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 Abfrage abzugleichen, und beginnt mit der Wiedergabe dieser Inhalte.

Fügen Sie in diesem Intent zusätzlich den String EXTRA_MEDIA_FOCUS ein, der den gewünschten Suchmodus angibt. Beispielsweise kann im Suchmodus 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
Weitere Funktionen
MediaStore.EXTRA_MEDIA_FOCUS (erforderlich)

Gibt den Suchmodus an: ob der Nutzer nach einem bestimmten Künstler, Album, Titel oder einer Playlist sucht. Die meisten Suchmodi haben zusätzliche Extras. Wenn sich der Nutzer beispielsweise einen bestimmten Song anhören möchte, hat die Absicht 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. der letzten Playlist, die der Nutzer angehört hat.

Weitere Extras:

  • QUERY (erforderlich): Ein leerer String. Dieses Extra wird immer aus Gründen der Abwärtskompatibilität bereitgestellt. Vorhandene Anwendungen, die Suchmodi nicht kennen, können diesen Intent als unstrukturierte Suche verarbeiten.

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

Spielen Sie einen bestimmten Titel, ein bestimmtes Album oder ein bestimmtes Genre über eine unstrukturierte Suchanfrage ab. Mit diesem Suchmodus können Apps einen Intent generieren, wenn sie den Inhaltstyp, den der Nutzer beobachten möchte, nicht identifizieren können. Verwenden Sie nach Möglichkeit spezifischere Suchmodi.

Weitere Extras:

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

GenreAudio.Genres.ENTRY_CONTENT_TYPE

Musik eines bestimmten Genres abspielen

Weitere Extras:

  • "android.intent.extra.genre" (erforderlich): Das Genre.
  • QUERY (erforderlich): das Genre. Diese zusätzlichen Informationen werden aus Gründen der Abwärtskompatibilität immer bereitgestellt. Vorhandene Apps, die Suchmodi nicht kennen, können diesen Intent als unstrukturierte Suche verarbeiten.

InterpretAudio.Artists.ENTRY_CONTENT_TYPE

Musik von einem bestimmten Künstler abspielen

Weitere Extras:

  • EXTRA_MEDIA_ARTIST (erforderlich): der Interpret.
  • "android.intent.extra.genre": das Genre.
  • QUERY (erforderlich): Ein String, der eine beliebige Kombination aus Künstler oder Genre enthält. Diese zusätzlichen Informationen werden aus Gründen der Abwärtskompatibilität immer bereitgestellt. Vorhandene Anwendungen, die Suchmodi nicht kennen, können diesen Intent als unstrukturierte Suche verarbeiten.

AlbumAudio.Albums.ENTRY_CONTENT_TYPE

Musik von einem bestimmten Album abspielen

Weitere Extras:

  • EXTRA_MEDIA_ALBUM (erforderlich): das Album.
  • EXTRA_MEDIA_ARTIST: der Künstler.
  • "android.intent.extra.genre": das Genre.
  • QUERY (erforderlich): Ein String, der eine beliebige Kombination aus dem Album oder dem Künstler enthält. Dieses Extra wird immer aus Gründen der Abwärtskompatibilität bereitgestellt. Vorhandene Anwendungen, die Suchmodi nicht kennen, können diesen Intent als unstrukturierte Suche verarbeiten.

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

Einen bestimmten Titel abspielen

Weitere Extras:

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

PlaylistAudio.Playlists.ENTRY_CONTENT_TYPE

Spiele eine bestimmte Playlist oder eine Playlist ab, die bestimmten Kriterien durch zusätzliche Extras entspricht.

Weitere 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 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 immer aus Gründen der Abwärtskompatibilität bereitgestellt. Vorhandene Anwendungen, die Suchmodi nicht kennen, können diesen Intent als unstrukturierte Suche verarbeiten.

Beispiel für einen 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 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 verwenden, prüfen Sie den Wert des Zusatzes EXTRA_MEDIA_FOCUS im eingehenden Intent, um den Suchmodus zu bestimmen. Sobald Ihre Aktivität den Suchmodus erkannt hat, lesen Sie die Werte der zusätzlichen Extras für diesen speziellen Suchmodus. Anhand dieser Informationen kann Ihre Anwendung dann eine Suche in ihrem Inventar ausführen, um den mit der Suchanfrage übereinstimmenden Inhalt wiederzugeben. Dies wird im folgenden Beispiel gezeigt.

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 von Notizen ist eine gängige Aktion in Notizen-Apps. Erstellen Sie einen Intent-Filter, um anzugeben, dass Ihre App diese Aktion ausführen kann. Verwenden Sie dazu die Informationen im folgenden Abschnitt.

Notiz erstellen

Verwenden Sie zum Erstellen einer neuen Notiz die Aktion ACTION_CREATE_NOTE und geben Sie mithilfe der folgenden Extras Details wie den Betreff und den Text 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
"*/*"
Weitere Funktionen
EXTRA_NAME
Ein String, der den Titel oder Betreff der Notiz angibt.
EXTRA_TEXT
Ein String, der den Text der Notiz angibt.

Beispiel für einen 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 Intent-Filter:

<activity ...>
    <intent-filter>
        <action android:name="com.google.android.gms.actions.CREATE_NOTE" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="*/*" />
    </intent-filter>
</activity>

Smartphone

Das Einleiten von Anrufen ist eine gängige Aktion bei Telefon-Apps. Erstellen Sie einen Intent-Filter, um anzugeben, dass Ihre App diese Aktion ausführen kann. Verwenden Sie dazu die Informationen im folgenden Abschnitt.

Anruf starten

Wenn Sie die Telefon App öffnen und eine Telefonnummer wählen möchten, verwenden Sie die Aktion ACTION_DIAL und geben Sie eine Telefonnummer anhand des folgenden URI-Schemas an. Die Telefon-App wird geöffnet und der Nutzer muss auf die Schaltfläche Anrufen tippen, um den Anruf zu starten.

Google-Sprachbedienung

  • „555 5555 anrufen“
  • „Anrufen Benjamin“
  • „Mailboxnachrichten anrufen“

Verwenden Sie die Aktion ACTION_CALL und geben Sie mithilfe des folgenden URI-Schemas eine Telefonnummer an, um direkt einen Anruf zu tätigen. Wenn die Telefon-App geöffnet wird, beginnt sie den Anruf. Der Nutzer muss dazu 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" />
Aktion
  • ACTION_DIAL: Das Telefon oder die Telefon App wird geöffnet.
  • ACTION_CALL: Tätigt einen Telefonanruf (Berechtigung CALL_PHONE erforderlich)
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 der Telefon App eignet sich gut für die Normalisierung von Schemas wie Telefonnummern. Das beschriebene Schema ist in der Methode Uri.parse() also nicht unbedingt erforderlich. Wenn Sie jedoch noch kein Schema ausprobiert haben oder nicht sicher sind, ob es verarbeitet werden kann, verwenden Sie stattdessen die Methode Uri.fromParts().

Beispiel für einen 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 finden Sie häufige Aktionen für Suchanwendungen. Dazu gehören die 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

Google-Sprachbedienung

  • „Such nach Katzenvideos auf meinervideoapp“

Damit die Suche im Kontext Ihrer App unterstützt wird, müssen Sie in Ihrer App einen Intent-Filter mit der Aktion SEARCH_ACTION deklarieren, 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 für Google Assistant.

Aktion
"com.google.android.gms.actions.SEARCH_ACTION"
Suchanfragen über die Google-Sprachbedienung unterstützen.
Weitere Funktionen
QUERY
Ein String, der die Suchanfrage enthält.

Beispiel für Intent-Filter:

<activity android:name=".SearchActivity">
    <intent-filter>
        <action android:name="com.google.android.gms.actions.SEARCH_ACTION"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>

Internetsuche durchführen

Verwenden Sie zum Starten einer Websuche die Aktion ACTION_WEB_SEARCH und geben Sie den Suchstring im Extra SearchManager.QUERY an.

Aktion
ACTION_WEB_SEARCH
Daten-URI-Schema
Keine
MIME-Typ
Keine
Weitere Funktionen
SearchManager.QUERY
Suchstring.

Beispiel für einen 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 in der App für Systemeinstellungen einen Bildschirm zu öffnen, wenn der Nutzer etwas ändern muss, verwenden Sie eine der folgenden Intent-Aktionen:

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

Informationen zu weiteren verfügbaren Einstellungsbildschirmen finden Sie in der Settings-Dokumentation .

Daten-URI-Schema
Keine
MIME-Typ
Keine

Beispiel für einen 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 Schreiben einer SMS/MMS mit einem Anhang ist eine gängige Aktion in SMS-/MMS-Apps. Erstellen Sie einen Intent-Filter, um anzugeben, dass Ihre App diese Aktion ausführen kann. Verwenden Sie dazu die Informationen im folgenden Abschnitt.

SMS/MMS mit Anhang verfassen

Verwenden Sie zum Starten einer SMS- oder MMS-Textnachricht eine der folgenden Intent-Aktionen und geben Sie Nachrichtendetails wie Telefonnummer, Betreff und Nachrichtentext 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 die gleiche Weise behandelt.

MIME-Typ
"text/plain"
"image/*"
"video/*"
Weitere Funktionen
"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, der auf das Bild oder Video verweist, das angehängt werden soll. Bei Verwendung der Aktion ACTION_SEND_MULTIPLE ist dieses Extra ein ArrayList von Uri-Objekten, die auf die Bilder oder Videos verweisen, die angehängt werden sollen.

Beispiel für einen 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 Sie sicherstellen möchten, dass Ihr Intent nur von einer SMS-App und nicht von anderen E-Mail- oder Social Apps verarbeitet wird, 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 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

Das Laden einer Web-URL ist eine gängige Aktion bei Webbrowser-Apps. Erstellen Sie einen Intent-Filter, um anzugeben, dass Ihre App diese Aktion ausführen kann. Verwenden Sie dazu die Informationen im folgenden Abschnitt.

Web-URL laden

Google-Sprachbedienung

  • „öffne beispiel.de“

Verwenden Sie zum Öffnen einer Webseite 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 für einen 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 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, schließen Sie einen Intent-Filter für URLs ein, die auf Ihre Website verweisen. Wenn Nutzer deine App installiert haben, öffnen Links in E-Mails oder anderen Webseiten, die auf deine Website verweisen, deine Android-App anstelle deiner Webseite. Weitere Informationen findest du unter Umgang mit Android-App-Links.

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

Intents mit Android Debug Bridge prüfen

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

  1. Android-Gerät für die Entwicklung einrichten oder ein virtuelles Gerät verwenden.
  2. Installiere eine Version deiner App, die die zu unterstützenden Intents verarbeitet.
  3. Intent mit adb auslösen:
    adb shell am start -a <ACTION> -t <MIME_TYPE> -d <DATA> \
      -e <EXTRA_NAME> <EXTRA_VALUE> -n <ACTIVITY>
    

    Beispiel:

    adb shell am start -a android.intent.action.DIAL \
      -d tel:555-5555 -n org.example.MyApp/.MyActivity
    
  4. Wenn Sie die erforderlichen Intent-Filter definieren, müssen Sie den Intent verarbeiten.

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