Häufig verwendete Intents

Mit einem Intent können Sie eine Aktivität in einer anderen App starten, indem Sie ein Aktion, die Sie ausführen möchten, z. B. "Karte anzeigen" oder „ein Bild.“ in einem Intent-Objekt. Diese Art von Intent wird als impliziter Intent bezeichnet, da er die App nicht angibt. Komponente zu starten, gibt stattdessen aber eine Aktion an und gibt Daten, mit denen die Aktion ausgeführt werden soll.

Wenn du startActivity() anrufst oder startActivityForResult() und übergeben einen impliziten Intent, das System behoben den Intent an eine App übergeben, die den Intent verarbeiten kann und entsprechend Activity. Bei mehreren Apps das den Intent verarbeiten kann, zeigt das System dem Nutzer ein Dialogfeld, die gewünschte App auswählen.

Auf dieser Seite werden mehrere implizite Intents beschrieben, mit denen Sie gängige Aktionen ausführen können. Sie sind nach der Art der App sortiert, die den Intent verarbeitet. Jedes Außerdem erfahren Sie, wie Sie einen Intent Filter, um anzugeben, dass die App die Aktion ausführen kann.

Achtung: Wenn sich auf dem Gerät keine Apps befinden, die eine implizite Absicht empfangen können, stürzt eine App ab, wenn sie startActivity() aufruft. Um zu überprüfen, ob eine App zum Empfangen des Intents vorhanden ist, rufen Sie resolveActivity() für Ihr Intent-Objekt auf. Wenn das Ergebnis nicht null ist, gibt es mindestens eine App, die die Intent verarbeiten kann, und startActivity() kann sicher aufgerufen werden. Wenn das Ergebnis null sein, den Intent nicht verwenden und nach Möglichkeit den die den Intent aufruft.

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

Informationen zum Auslösen der auf dieser Seite aufgeführten Intents aus Ihrer Entwicklungsphase siehe Intents mit der Android-Fehlerbehebung überprüfen Brücke.

Google Voice Actions

Google Voice Aktionen lösen einige der auf dieser Seite aufgeführten Intents als Reaktion auf Sprachbefehle verwenden. Weitere Informationen finden Sie unter Erste Schritte mit Sprachaktionen des Systems.

Wecker

Im Folgenden finden Sie häufige Aktionen für Wecker-Apps. Außerdem sind die Informationen aufgeführt, die Sie zum Erstellen eines Intent-Filters benötigen, um die Möglichkeit Ihrer App zur Ausführung der einzelnen Aktionen zu bewerben.

Wecker stellen

Google-Sprachbedienung

  • „Stell einen Wecker auf 7 Uhr“

Erstelle einen neuen Wecker mit der ACTION_SET_ALARM Aktion und geben Sie Alarmdetails wie die Uhrzeit und die Nachricht mithilfe der folgenden Extras an.

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

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
Ein ArrayList, das jeden Wochentag enthält, an dem dieser Wecker wiederholt wird. Jeder Tag muss mit einer Ganzzahl aus Calendar deklariert werden Klasse, 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 für keinen Klingelton.

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 Anwendung das SET_ALARM-Berechtigung:

<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“

Verwende die Aktion ACTION_SET_TIMER, um einen Countdown-Timer zu erstellen, und gib mit den folgenden Extras Details wie die Dauer an.

Hinweis:Dieser Intent ist verfügbar in Android 4.4 (API-Level 19) und höher.

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 Anwendung das SET_ALARM-Berechtigung:

<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 Wecker aufzurufen, verwende ACTION_SHOW_ALARMS Aktion ausführen.

Dieser Intent wird zwar nicht von vielen Apps aufgerufen, kann jede App, die als Wecker fungiert, diesen Intent-Filter und zeig die Liste der aktuellen Alarme an.

Hinweis:Dieser Intent ist verfügbar in Android 4.4 (API-Level 19) und höher.

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 die Fähigkeit Ihrer App, diese Aktion auszuführen, mithilfe der Methode erhalten Sie im folgenden Abschnitt.

Kalendertermin hinzufügen

Um dem Kalender eines Nutzers einen neuen Termin hinzuzufügen, verwenden Sie die ACTION_INSERT und geben Sie den Daten-URI mithilfe von Events.CONTENT_URI. Mit den folgenden Extras können Sie dann verschiedene Ereignisdetails angeben.

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

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

Beispiel für eine Absicht:

Kotlin

fun addEvent(title: String, location: String, begin: Long, end: Long) {
    val intent = Intent(Intent.ACTION_INSERT).apply {
        data = Events.CONTENT_URI
        putExtra(Events.TITLE, title)
        putExtra(Events.EVENT_LOCATION, location)
        putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, begin)
        putExtra(CalendarContract.EXTRA_EVENT_END_TIME, end)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

public void addEvent(String title, String location, long begin, long end) {
    Intent intent = new Intent(Intent.ACTION_INSERT)
            .setData(Events.CONTENT_URI)
            .putExtra(Events.TITLE, title)
            .putExtra(Events.EVENT_LOCATION, location)
            .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, begin)
            .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, end);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

Beispiel für Intent-Filter:

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

Kamera

Im Folgenden finden Sie gängige Aktionen für Kamera-Apps und die benötigten Informationen. , um einen Intent-Filter zu erstellen, mit dem Sie angeben können, ob Ihre App die einzelnen Aktionen ausführen kann.

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 auch den URI-Speicherort an, an dem die Kamera das Foto oder Video speichern soll, in EXTRA_OUTPUTextra.

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 (als Uri-Objekt).

Wenn die Kamera-App erfolgreich zurückgegeben wird sich auf Ihre Aktivität konzentrieren, d. h., Ihre App empfängt den onActivityResult()-Callback. kann unter der von Ihnen angegebenen URI auf das Foto oder Video zugreifen durch den Wert EXTRA_OUTPUT.

Hinweis: Wenn Sie ACTION_IMAGE_CAPTURE verwenden zum Aufnehmen eines Fotos, gibt die Kamera möglicherweise auch verkleinerte Kopie oder Miniaturansicht des Fotos im Ergebnis Intent, gespeichert als Bitmap in einem zusätzlichen Feld namens "data"

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 zur Verwendung dieses Intents zum Aufnehmen eines Fotos, darunter: wie eine geeignete Uri für den Ausgabeort erstellt wird, 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ät auf das Extra EXTRA_OUTPUT im eingehenden Intent prüfen und das aufgenommene Bild oder Video dann im angegebenen Speicherort und rufen Sie setResult() mit einem Intent auf, das eine komprimierte Miniaturansicht in einem zusätzlichen mit dem Namen "data".

Kamera-App im Modus „Standbild“ starten

Google-Sprachbedienung

  • "Mach ein Foto"

Wenn Sie eine Kamera-App im Modus für Standbilder öffnen möchten, verwenden Sie die Aktion INTENT_ACTION_STILL_IMAGE_CAMERA.

Aktion
INTENT_ACTION_STILL_IMAGE_CAMERA
Daten-URI-Schema
Keine
MIME-Typ
Keine
Extras
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
Extras
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 gängige Aktionen für Apps zur Kontaktverwaltung. Außerdem finden Sie Informationen, die Sie zum Erstellen eines Intent-Filters benötigen, um die Möglichkeit Ihrer App zur Ausführung der einzelnen Aktionen zu bewerben.

Kontakt auswählen

Wenn der Nutzer einen Kontakt auswählen und Ihrer App Zugriff auf alle Kontaktdaten gewähren soll, verwenden Sie die Aktion ACTION_PICK und geben Sie den MIME-Typ Contacts.CONTENT_TYPE an.

Das Ergebnis, das Intent an deinen onActivityResult()-Callback gesendet hat, enthält das content:-URI, der auf den ausgewählten Kontakt verweist. Die Antwort gewährt Ihre App vorübergehend Berechtigungen zum Lesen dieses Kontakts über die Contacts Provider API gewähren, auch wenn deine App die Berechtigung „READ_CONTACTS“ nicht hat.

Tipp:Wenn Sie nur auf einen bestimmten Kontakt zugreifen möchten wie eine Telefonnummer oder E-Mail-Adresse, erhalten Sie im nächsten Abschnitt Bestimmte Kontaktdaten auswählen.

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 Kontaktdetails, sobald Sie den Kontakt-URI haben, finden Sie unter Weitere Informationen finden Sie unter Details abrufen für einen Kontakt.

Wenn Sie den Kontakt-URI mit diesem Intent abrufen, brauche die READ_CONTACTS Berechtigung, grundlegende Details dieses Kontakts zu lesen, wie den Anzeigenamen und ob der Kontakt markiert ist. Wenn Sie jedoch genauere Daten zu einem bestimmten Kontakt lesen möchten, z. B. seine Telefonnummer oder E-Mail-Adresse, benötigen Sie die Berechtigung READ_CONTACTS.

Bestimmte Kontaktdaten auswählen

Damit der Nutzer eine bestimmte Information aus einem Kontakt auswählen kann, z. B. eine Telefonnummer, E-Mail-Adresse oder einen anderen Datentyp enthält, ACTION_PICK-Aktion und legen Sie den MIME-Typ auf eins fest der folgenden Inhaltstypen, wie z. B. CommonDataKinds.Phone.CONTENT_TYPE, um die Telefonnummer des Kontakts zu erhalten.

Hinweis : In vielen Fällen benötigt Ihre App die Berechtigung READ_CONTACTS Berechtigung, bestimmte Informationen zu einem bestimmten Kontakt anzuzeigen.

Wenn Sie nur einen Datentyp von einem Kontakt abrufen möchten, kann diese Methode mit einem CONTENT_TYPE vom ContactsContract.CommonDataKinds Klasse ist effizienter als mithilfe von Contacts.CONTENT_TYPE, wie im vorherigen Abschnitt gezeigt. Das Ergebnis liefert Ihnen direkte auf die gewünschten Daten zugreifen, ohne dass Sie eine komplexere Abfrage an Contacts Provider (Kontaktanbieter) durchführen müssen.

Das Ergebnis, das Intent an deinen onActivityResult()-Callback gesendet hat, enthält das content:-URI, der auf die ausgewählten Kontaktdaten verweist. Die Antwort gewährt temporäre Berechtigungen deiner App zum Lesen dieser Kontaktdaten, auch wenn deine 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 weniger als 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.
            //...
        }
    }
}

Kontakt ansehen

Um die Details zu einem bekannten Kontakt aufzurufen, verwende die ACTION_VIEW Aktion und geben Sie den Kontakt mit einem content:-URI als Intent-Daten an.

Es gibt zwei Hauptmethoden, um den URI des Kontakts zu ermitteln:

  • Von der Aktion ACTION_PICK zurückgegebene Kontakt-URI verwenden wie im vorherigen Abschnitt beschrieben. Für diesen Ansatz sind keine App-Berechtigungen erforderlich.
  • Greifen Sie direkt auf die Liste aller Kontakte zu, wie unter Eine Liste aller Kontakte abrufen Kontakte Für diesen Ansatz ist der READ_CONTACTS erforderlich Berechtigung.
Aktion
ACTION_VIEW
Daten-URI-Schema
content:<URI>
MIME-Typ
Keine Der Typ wird aus der Kontakt-URI abgeleitet.

Beispiel für eine Absicht:

Kotlin

fun viewContact(contactUri: Uri) {
    val intent = Intent(Intent.ACTION_VIEW, contactUri)
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

public void viewContact(Uri contactUri) {
    Intent intent = new Intent(Intent.ACTION_VIEW, contactUri);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

Vorhandenen Kontakt bearbeiten

Um einen bekannten Kontakt zu bearbeiten, verwende ACTION_EDIT Aktion, geben Sie den Kontakt mit einem content:-URI an als Intent-Daten und fügen Sie alle bekannten Kontaktinformationen in Extras hinzu, die durch Konstanten in ContactsContract.Intents.Insert.

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

  • Von der Aktion ACTION_PICK zurückgegebene Kontakt-URI verwenden wie im vorherigen Abschnitt beschrieben. Für diesen Ansatz sind keine App-Berechtigungen erforderlich.
  • Greifen Sie direkt auf die Liste aller Kontakte zu, wie unter Eine Liste aller Kontakte abrufen Kontakte Für diesen Ansatz ist der READ_CONTACTS erforderlich Berechtigung.
Aktion
ACTION_EDIT
Daten-URI-Schema
content:<URI>
MIME-Typ
Der Typ wird aus der Kontakt-URI abgeleitet.
Weitere Funktionen
Mindestens eines der in ContactsContract.Intents.Insert definierten Extras damit Sie Felder mit Kontaktdaten ausfü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 von Kontakten finden Sie unter Kontakte mithilfe von Intents ändern.

Kontakte einfügen

Um einen neuen Kontakt einzufügen, verwenden Sie die Aktion ACTION_INSERT. Contacts.CONTENT_TYPE angeben als den MIME-Typ und fügen Sie alle bekannten Kontaktinformationen in Extras hinzu, die durch Konstanten in ContactsContract.Intents.Insert.

Aktion
ACTION_INSERT
Daten-URI-Schema
Keine
MIME-Typ
Contacts.CONTENT_TYPE
Extras
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 Ändern Kontakte, die Intents verwenden

E-Mail

Das Verfassen einer E-Mail mit optionalen Anhängen ist eine gängige Aktion in 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

Wählen Sie zum Verfassen einer E-Mail eine der folgenden Aktionen aus, je nachdem, ob Sie Anhänge hinzufügen möchten oder nicht: und geben Sie mithilfe der zusätzlichen Schlüssel E-Mail-Details wie Empfänger und Betreff an.

Aktion
ACTION_SENDTO (wenn kein Anhang vorhanden ist) 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 aller „To“-Elemente E-Mail-Adressen der Empfänger.
Intent.EXTRA_CC
Ein String-Array aller „CC“-Elemente E-Mail-Adressen der Empfänger.
Intent.EXTRA_BCC
Ein String-Array aller „Bcc“-Elemente E-Mail-Adressen der Empfänger.
Intent.EXTRA_SUBJECT
Ein String mit dem Betreff der E-Mail.
Intent.EXTRA_TEXT
Ein String mit dem Text der E-Mail.
Intent.EXTRA_STREAM
Ein Uri, der auf den Anhang verweist. Bei Verwendung der Aktion ACTION_SEND_MULTIPLE ist dies stattdessen 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 einem SMS oder Social App und verwenden Sie dann 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 häufige Aktionen für Dateispeicher-Apps und die benötigten Informationen. , um einen Intent-Filter zu erstellen, mit dem Sie angeben können, ob Ihre App die einzelnen Aktionen ausführen kann.

Bestimmten Dateityp abrufen

Wenn Sie den Nutzer auffordern möchten, eine Datei wie ein Dokument oder Foto auszuwählen und eine Referenz an Ihre App zurückzugeben, verwenden Sie die Aktion ACTION_GET_CONTENT und geben Sie den gewünschten MIME-Typ an. Der an deine App zurückgegebene Dateiverweis ist vorübergehend für die aktuelle Aktivität deiner Aktivität Lebenszyklus. Wenn Sie also später darauf zugreifen möchten, müssen Sie eine Kopie importieren, die Sie später lesen können.

Mit dieser Intent-Definition kann der Nutzer auch eine neue Datei erstellen. Für Anstatt beispielsweise ein vorhandenes Foto auszuwählen, können Nutzende 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 beliebig sein, z. B. ein http:-URI, ein file:-URI oder ein content:-URI. Wenn Sie auswählbare Dateien jedoch auf solche beschränken möchten, auf die über einen Inhaltsanbieter (einen content:-URI) zugegriffen werden kann und die als Dateistream mit openFileDescriptor() verfügbar sind, fügen Sie Ihrer Intent-Definition die Kategorie CATEGORY_OPENABLE hinzu.

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

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 vom Gerät verfügbar sein muss oder ein Download von einem Remote-Dienst erforderlich ist.
Kategorie (optional)
CATEGORY_OPENABLE
Damit werden nur „öffnebare“ Dateien zurückgegeben, die mit openFileDescriptor() als Dateistream 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, um ein Foto zurückzugeben:

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

Einen bestimmten Dateityp öffnen

Anstatt eine Kopie einer Datei abzurufen, die du unter Android in deine App importieren musst, kannst du dafür die Aktion ACTION_GET_CONTENT verwenden. 4.4 oder höher können Sie stattdessen das Öffnen einer Datei anfordern, die von einer anderen App verwaltet wird. mit der Aktion ACTION_OPEN_DOCUMENT und Angeben eines MIME-Typs. 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 auswählen, wird der ACTION_CREATE_DOCUMENT Mit Intent können Nutzer auswählen, wo sie ein neues Dokument erstellen möchten, beispielsweise in einer anderen App. der den Speicher des Dokuments verwaltet. Ihre App empfängt dann den URI-Speicherort, an dem sie das neue Dokument schreiben kann.

Während der Intent, der über die Aktion ACTION_GET_CONTENT an Ihre onActivityResult()-Methode gesendet wird, einen beliebigen URI zurückgeben kann, wird in der Ergebnisabsicht von ACTION_OPEN_DOCUMENT und ACTION_CREATE_DOCUMENT immer die ausgewählte Datei als content:-URI angegeben, der von einem DocumentsProvider unterstützt wird. Sie können die Datei mit openFileDescriptor() und fragt seine Details mithilfe von Spalten aus DocumentsContract.Document ab.

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 Ihrer App zu erstellen oder wenn Sie eine Datei öffnen und bearbeiten möchten.

Sie können auch zulassen, dass Nutzer mehrere Dateien auswählen, indem Sie EXTRA_ALLOW_MULTIPLE für den Intent, festgelegt auf true. 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 abrufen, Objekt, das von getClipData() zurückgegeben wird.

Hinweis:Ihr Intent muss einen MIME-Typ und muss die Kategorie CATEGORY_OPENABLE deklarieren. Wenn Sie können auch mehrere MIME-Typen angeben, indem Sie ein Array von MIME-Typen mit der Eigenschaft EXTRA_MIME_TYPES zusätzlich. In diesem Fall müssen Sie die primären MIME-Typ in setType() auf "*/*".

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 Ihrer App entsprechen anfragen. Wenn Sie diese zusätzliche Option verwenden, müssen Sie den primären MIME-Typ in setType() in "*/*".
EXTRA_ALLOW_MULTIPLE
Ein boolescher Wert, der angibt, ob der Nutzer mehrere Dateien gleichzeitig auswählen kann.
EXTRA_TITLE
, um mit ACTION_CREATE_DOCUMENT einen ersten Dateinamen anzugeben.
EXTRA_LOCAL_ONLY
Ein boolescher Wert, der angibt, ob die zurückgegebene Datei direkt in und muss nicht von einem Remote-Dienst heruntergeladen werden.
Category
CATEGORY_OPENABLE
Damit werden nur „öffnebare“ Dateien zurückgegeben, die mit openFileDescriptor() als Dateistream dargestellt werden können.

Beispiel für eine Absicht, ein Foto aufzunehmen:

Kotlin

const val REQUEST_IMAGE_OPEN = 1

fun selectImage2() {
    val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
        type = "image/*"
        addCategory(Intent.CATEGORY_OPENABLE)
    }
    // Only the system receives the ACTION_OPEN_DOCUMENT, so no need to test.
    startActivityForResult(intent, REQUEST_IMAGE_OPEN)
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    if (requestCode == REQUEST_IMAGE_OPEN && resultCode == Activity.RESULT_OK) {
        val fullPhotoUri: Uri = data.data
        // Do work with full size photo saved at fullPhotoUri.
        ...
    }
}

Java

static final int REQUEST_IMAGE_OPEN = 1;

public void selectImage() {
    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
    intent.setType("image/*");
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    // Only the system receives the ACTION_OPEN_DOCUMENT, so no need to test.
    startActivityForResult(intent, REQUEST_IMAGE_OPEN);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_OPEN && resultCode == RESULT_OK) {
        Uri fullPhotoUri = data.getData();
        // Do work with full size photo saved at fullPhotoUri.
        ...
    }
}

Drittanbieter-Apps können nicht auf eine Absicht mit der Aktion ACTION_OPEN_DOCUMENT reagieren. Stattdessen erhält das System diese Intention erstellt und alle aus verschiedenen Apps verfügbaren Dateien auf einer einheitlichen Benutzeroberfläche angezeigt.

Wenn Sie die Dateien Ihrer Anwendung in dieser Benutzeroberfläche bereitstellen und anderen Apps erlauben möchten, sie zu öffnen, müssen Sie DocumentsProvider und fügen Sie einen Intent-Filter für PROVIDER_INTERFACE ("android.content.action.DOCUMENTS_PROVIDER"), wie im folgenden Beispiel gezeigt:

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

Weitere Informationen dazu, wie Sie dafür sorgen, dass die von Ihrer App verwalteten Dateien auch in anderen Apps geöffnet werden können, finden Sie unter Dateien mithilfe des Storage Access Framework öffnen.

Lokale Aktionen

Das Anrufen eines Autos ist eine gängige lokale Aktion. Intent-Filter erstellen, um die von Ihrer App zu bewerben diese Aktion anhand der Informationen im folgenden Abschnitt ausführen.

Taxi rufen

Google-Sprachbedienung

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

(nur Wear OS)

Wenn Sie ein Taxi rufen möchten, nutzen Sie die ACTION_RESERVE_TAXI_RESERVATION Aktion ausführen.

Hinweis: Apps müssen vor Abschluss dieser Aktion die Bestätigung des Nutzers einholen.

Aktion
ACTION_RESERVE_TAXI_RESERVATION
Daten-URI
Keine
MIME-Typ
Keine
Extras
Keine

Beispiel für 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 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
Die Karte wird am angegebenen Längen- und Breitengrad angezeigt.

Beispiel: "geo:47.6,-122.3"

geo:latitude,longitude?z=zoom
Die Karte wird bei einer bestimmten Zoomstufe und den angegebenen Längen- und Breitengraden angezeigt. Eine Zoomstufe von 1 zeigt die gesamte Erde, zentriert an der angegebenen lat,lng. Höchster Wert (nä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 geo-URI übergebenen Strings müssen codiert sein. 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 finden Sie häufige Aktionen für Musik- und Video-Apps sowie die benötigten Informationen. , um einen Intent-Filter zu erstellen, mit dem Sie angeben können, ob Ihre App die einzelnen Aktionen ausführen kann.

Mediendatei wiedergeben

Verwende zum Abspielen einer Musikdatei die Aktion ACTION_VIEW und gibt 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“

Um Musik basierend auf einer Suchanfrage abzuspielen, verwende die INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH Intent. Eine App könnte ausgelöst werden als Reaktion auf den Sprachbefehl des Nutzers, Musik abzuspielen. Die empfangende App für dieses Intent in seinem Inventar eine Suche aus, um vorhandene Inhalte mit der angegebenen Abfrage abzugleichen, und beginnt die Wiedergabe des Inhalts.

Fügen Sie in diesem Intent den String EXTRA_MEDIA_FOCUS ein. extra, der den gewünschten Suchmodus angibt. Beispielsweise kann durch den Suchmodus festgelegt werden, ob nach einem Künstler- oder Songnamen.

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, Song oder einer bestimmten Playlist sucht. Für die meisten Suchmodi sind zusätzliche Optionen erforderlich. Wenn sich der Nutzer beispielsweise für einen bestimmten Song interessiert, kann der Intent drei zusätzliche Extras haben: den Titel des Songs, den Künstler und das Album. Dieser Intent unterstützt die folgenden Suchmodi für jeder Wert von EXTRA_MEDIA_FOCUS:

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

Jede Art von Musik abspielen Die empfangende App spielt Musik auf Grundlage einer intelligenten Auswahl ab, z. B. als letzte Playlist, die der Nutzer angehört hat.

Weitere Extras:

  • QUERY (erforderlich): Ein leerer String. Diese Zusatzinformationen aus Gründen der Abwärtskompatibilität bereitgestellt. Vorhandene Apps, die die Suchmodi nicht kennen, können diese Suchabsicht als unstrukturierte Suche verarbeiten.

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

Du kannst einen bestimmten Song, ein Album oder ein Genre über eine unstrukturierte Suchanfrage abspielen. Apps können einen Intent mit diesem Suchmodus, wenn er den gewünschten Inhaltstyp nicht identifizieren kann hören. Verwenden Sie nach Möglichkeit spezifischere Suchmodi.

Weitere Extras:

  • QUERY (erforderlich): Ein String, der eine beliebige Kombination enthält. des Künstlers, des Albums, des Titels oder des Genres.

Genre: Audio.Genres.ENTRY_CONTENT_TYPE

Musik eines bestimmten Genres abspielen

Weitere Extras:

  • "android.intent.extra.genre" (erforderlich): Das Genre.
  • QUERY (erforderlich): das Genre. Diese Option ist immer für die Abwärtskompatibilität verfügbar. Vorhandene Apps, die die Suchmodi nicht kennen, können als unstrukturierte Suche.

KünstlerAudio.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 von den Künstler oder das Genre. Diese Option ist immer für die Abwärtskompatibilität verfügbar. Vorhandene Apps, die Suchmodi nicht kennen, können diesen Intent als unstrukturierten suchen.

Album: Audio.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 für rückwärts Kompatibilität. Vorhandene Apps, die die Suchmodi nicht kennen, können diese Suchabsicht als unstrukturierte Suche verarbeiten.

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

Einen bestimmten Titel abspielen

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 von Album, Künstler, Genre oder Titel. Diese Zusatzkosten werden immer Abwärtskompatibilität. Vorhandene Apps, die die Suchmodi nicht kennen, können dies verarbeiten als unstrukturierte Suche.

PlaylistAudio.Playlists.ENTRY_CONTENT_TYPE

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

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, zu dem die Playlist gehört
  • QUERY (erforderlich): Ein String, der eine beliebige Kombination enthält. des Albums, des Künstlers, des Genres, der Playlist oder des Titels. Diese Zusatzinformationen aus Gründen der Abwärtskompatibilität bereitgestellt. Vorhandene Apps, die die Suchmodi nicht kennen, können diese Suchabsicht als unstrukturierte Suche verarbeiten.

Beispiel für eine Absicht:

Wenn sich der Nutzer Musik von einem bestimmten Künstler anhören möchte, kann eine Such-App die folgende Absicht generieren:

Kotlin

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

Java

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

Beispiel für 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 EXTRA_MEDIA_FOCUS mehr in die eingehende Zahlung Intent, um den Suchmodus festzulegen. Sobald Ihre Aktivitäten die Werte der zusätzlichen Extras für den jeweiligen Suchmodus lesen. Anhand dieser Informationen kann Ihre App dann eine Suche innerhalb ihres Inventars durchführen, um die die mit der Suchanfrage übereinstimmen. 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 die Fähigkeit Ihrer App, diese Aktion auszuführen, mithilfe der Methode erhalten Sie im folgenden Abschnitt.

Notiz erstellen

Verwenden Sie zum Erstellen einer neuen Notiz die ACTION_CREATE_NOTE und geben Sie Notizendetails wie den Betreff und den Text mithilfe der folgenden Extras an.

Hinweis: Apps müssen vor Abschluss dieser Aktion die Bestätigung des Nutzers einholen.

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>

Telefon

Das Initiieren eines Anrufs ist eine gängige Aktion für Smartphone-Apps. Erstellen Sie einen Intent-Filter, um die Fähigkeit Ihrer App, diese Aktion auszuführen, mithilfe der Methode erhalten Sie 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 über das folgende URI-Schema. Wenn die Telefon App geöffnet wird, wird die Telefonnummer, Der Nutzer muss dann auf die Schaltfläche Anrufen tippen, um den Anruf zu starten.

Google-Sprachbedienung

  • „555 5555 anrufen“
  • „Anrufen Benjamin“
  • „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 dazu nicht auf die Schaltfläche Anrufen tippen.

Für die Aktion ACTION_CALL müssen Sie den Parameter CALL_PHONE-Berechtigung für Ihre Manifestdatei:

<uses-permission android:name="android.permission.CALL_PHONE" />
Aktion
  • ACTION_DIAL: Das Telefon oder die Telefon App wird geöffnet.
  • ACTION_CALL – startet 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. Gültige Beispiele:

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

Die Telefon App der Telefon App eignet sich gut für die Normalisierung von Schemata wie Telefonnummern. Das beschriebene Schema ist also im Uri.parse()-Methode. Falls Sie jedoch noch kein Schema ausprobiert haben oder nicht sicher sind, verarbeitet werden kann, verwenden Sie die 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 gängige Aktionen für Such-Apps und die benötigten Informationen. , um einen Intent-Filter zu erstellen, mit dem Sie angeben können, ob Ihre App die einzelnen Aktionen ausführen kann.

Mit einer bestimmten App suchen

Google-Sprachbedienung

  • „Such nach Katzenvideos in der MyVideo 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 für einen Intent-Filter gezeigt.

Hinweis:Wir raten davon ab, SEARCH_ACTION für die App-Suche zu verwenden. Implementieren Sie stattdessen die Methode GET_THING , um die integrierte Unterstützung der In-App-Suche von Google Assistant zu nutzen. Weitere Informationen finden Sie in der Dokumentation zu App-Aktionen von 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 die Aktion ACTION_WEB_SEARCH, um eine Websuche zu starten und geben Sie die Suchzeichenfolge in der SearchManager.QUERY Extra.

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

Beispiel für eine Absicht:

Kotlin

fun searchWeb(query: String) {
    val intent = Intent(Intent.ACTION_WEB_SEARCH).apply {
        putExtra(SearchManager.QUERY, query)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

public void searchWeb(String query) {
    Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
    intent.putExtra(SearchManager.QUERY, query);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

Einstellungen

So öffnen Sie einen Bildschirm in der App für Systemeinstellungen, wenn Nutzer Änderungen an Ihrer App vornehmen müssen: 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 die Fähigkeit Ihrer App, diese Aktion auszuführen, mithilfe der Methode erhalten Sie im folgenden Abschnitt.

SMS/MMS mit Anhang verfassen

Verwenden Sie eine der folgenden Intent-Aktionen und geben Sie die Nachricht an, um eine SMS oder MMS zu starten Details wie Telefonnummer, Betreff und Nachrichtentext mithilfe der folgenden zusätzlichen Schlüssel abrufen.

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 SMS.
EXTRA_STREAM
Ein Uri, der auf den Bild oder Video anhängen. 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 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 Ihre Intent-Anfrage nur von einer Messaging-App und nicht von anderen E-Mail- oder Social-Media-Apps verarbeitet wird, verwenden Sie die Aktion ACTION_SENDTO und fügen Sie das Datenschema "smsto:" hinzu, wie im folgenden Beispiel gezeigt:

Kotlin

fun composeMmsMessage(message: String, attachment: Uri) {
    val intent = Intent(Intent.ACTION_SEND).apply {
        data = Uri.parse("smsto:")  // Only SMS apps respond to this.
        putExtra("sms_body", message)
        putExtra(Intent.EXTRA_STREAM, attachment)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

public void composeMmsMessage(String message, Uri attachment) {
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setData(Uri.parse("smsto:"));  // Only SMS apps respond to this.
    intent.putExtra("sms_body", message);
    intent.putExtra(Intent.EXTRA_STREAM, attachment);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

Beispiel für Intent-Filter:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <data android:type="text/plain" />
        <data android:type="image/*" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Hinweis: Wenn Sie eine SMS-/MMS-Messaging-App entwickeln, müssen Sie Intent-Filter für mehrere zusätzliche Aktionen implementieren, damit die App unter Android 4.4 und höher als Standard-SMS-App verfügbar ist. Weitere Informationen finden Sie in der Dokumentation um Telephony.

Webbrowser

Das Laden einer Web-URL ist eine gängige Aktion bei 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 Voice Actions

  • „öffne beispiel.de“

Webseite mit der Aktion ACTION_VIEW öffnen und die Web-URL in den Intent-Daten angeben.

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 die fügen Sie einen Intent-Filter für URLs ein, die auf Ihre Website verweisen. Gehen Sie dann so vor: Links in E-Mails oder anderen Webseiten, die auf Ihre Website verweisen, wenn Nutzer Ihre App installiert haben Ihre Android-App statt Ihrer Webseite öffnen. Weitere Informationen finden Sie unter Umgang mit Android-App-Links

Ab Android 12 (API-Level 31) wird ein generischer Web Intent zu einem Aktivitäten in Ihrer App nur, wenn sie für die jeweilige Domain genehmigt wurde die in diesem Web Intent enthalten sind. Wenn Ihre App für die Domain nicht genehmigt wird, Intent wird stattdessen in die Standardbrowser-App des Nutzers aufgelöst.

Intents mit Android Debug Bridge prüfen

Um zu überprüfen, ob Ihre Anwendung auf die zu unterstützenden Intents reagiert, können Sie den adb-Tool, um bestimmte Intents auszulösen, indem Folgendes:

  1. Android-Gerät für die Entwicklung einrichten oder ein virtuelles Gerät verwenden.
  2. Installieren Sie eine Version Ihrer App, die die Intents verarbeitet, die Sie unterstützen möchten.
  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 Führen Sie Shell-Befehle aus.