Intents courants

Un intent vous permet de démarrer une activité dans une autre application en décrivant de l'action que vous souhaitez effectuer, telle que "afficher une carte" ou « prendre un d'image ». dans un objet Intent. Ce type d'intent est appelé intent implicite, car il ne spécifie pas l'application au début, mais spécifie à la place une action et fournit Des données avec lesquelles effectuer l'action

Lorsque vous appelez startActivity() ou startActivityForResult() et lui transmettre un intent implicite, le système résulte l'intent vers une application capable de le gérer et de lancer Activity correspondant. Si plusieurs applications peuvent gérer l'intent, le système présente à l'utilisateur une boîte de dialogue lui permettant de sélectionner l'application à utiliser.

Cette page décrit plusieurs intents implicites que vous pouvez utiliser pour effectuer des actions courantes, organisées par type d'application qui gère l'intent. Chaque montre également comment créer un intent filtre pour indiquer que votre application peut effectuer cette action.

Attention : Si aucune application de l'appareil ne peut recevoir un intent implicite, une application plante lorsqu'elle appelle startActivity(). Pour vérifier d'abord que une application existe pour recevoir l'intent, appelez resolveActivity() sur votre objet Intent. Si le résultat n'est pas nul, il existe au moins une application pouvant gérer l'intent et vous pouvez appeler startActivity() sans risque. Si le résultat est n'utilisez pas l'intent et, si possible, désactivez qui appelle l'intent.

Si vous ne savez pas comment créer des intents ou des filtres d'intent, commencez par lire la section Intents et Filtres.

Pour découvrir comment déclencher les intents répertoriés sur cette page à partir de votre code de développement consultez la section Vérifier les intents avec l'API Pont.

Commandes vocales Google

Google Voice Actions déclenche certains des intents répertoriés sur cette page en réponse à commandes vocales. Pour en savoir plus, consultez Premiers pas avec les commandes vocales système.

Réveil

Voici des actions courantes pour les applications de réveil, y compris les informations dont vous avez besoin pour créer un filtre d'intent afin d'annoncer que votre application peut effectuer chaque action.

Créer une alarme

Commandes vocales Google

  • "règle une alarme sur 7h du matin"

Pour créer une alarme, utilisez le ACTION_SET_ALARM. et spécifiez les détails de l'alarme, tels que l'heure et le message, à l'aide des extras suivants.

Remarque:Seuls les horaires, les minutes et les messages supplémentaires sont disponibles. sur Android 2.3 (niveau d'API 9) ou version antérieure. Les autres bonus sont disponibles dans les versions supérieures Google Cloud.

Action
ACTION_SET_ALARM
URI de données
Aucun
Type MIME
Aucun
Extras
EXTRA_HOUR
Heure de l'alarme.
EXTRA_MINUTES
Minutes de l'alarme.
EXTRA_MESSAGE
Un message personnalisé pour identifier l'alarme.
EXTRA_DAYS
Un ArrayList incluant chaque jour de la semaine où cette alarme a été déclenchée se répète. Chaque jour doit être déclaré avec un entier issu de Calendar , telle que MONDAY.

Pour une alarme ponctuelle, ne spécifiez pas cet élément supplémentaire.

EXTRA_RINGTONE
URI content: spécifiant une sonnerie à utiliser avec l'alarme, ou VALUE_RINGTONE_SILENT pour aucune sonnerie.

Pour utiliser la sonnerie par défaut, n'indiquez pas cet extra.

EXTRA_VIBRATE
Valeur booléenne indiquant si la vibration doit être activée pour cette alarme.
EXTRA_SKIP_UI
Valeur booléenne indiquant si l'application répondante doit ignorer son interface utilisateur lors de la configuration de l'alarme. Si la valeur est "true", l'application doit ignorer toute interface de confirmation et définir l'alarme spécifiée.

Exemple d'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);
    }
}
Remarque :

Pour appeler l'intent ACTION_SET_ALARM, votre application doit disposer de l'élément Autorisation SET_ALARM:

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

Exemple de filtre d'intent:

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

Créer un minuteur

Commandes vocales Google

  • "Règle le minuteur sur 5 minutes"

Pour créer un compte à rebours, utilisez l'action ACTION_SET_TIMER et spécifiez le minuteur des informations comme la durée en utilisant les extras suivants.

Remarque:Cet intent est disponible. sur Android 4.4 (niveau d'API 19) ou version ultérieure.

Action
ACTION_SET_TIMER
URI de données
Aucun
Type MIME
Aucun
Extras
EXTRA_LENGTH
Durée du minuteur, en secondes.
EXTRA_MESSAGE
Message personnalisé pour identifier le minuteur.
EXTRA_SKIP_UI
Valeur booléenne indiquant si l'application qui répond doit ignorer son UI lors du réglage du minuteur. Si la valeur est "true", l'application doit ignorer toute interface de confirmation et démarrer le minuteur spécifié.

Exemple d'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);
    }
}
Remarque :

Pour appeler l'intent ACTION_SET_TIMER, votre application doit disposer de l'élément Autorisation SET_ALARM:

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

Exemple de filtre d'intent:

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

Aff. toutes alarmes

Pour afficher la liste des alarmes, utilisez le ACTION_SHOW_ALARMS action.

Bien que peu d'applications appellent cet intent, car il est principalement utilisé par les applications système, toute application qui se comporte comme un réveil peut implémenter ce filtre d'intent et répondre en affichant la liste des alarmes actuelles.

Remarque:Cet intent est disponible. sur Android 4.4 (niveau d'API 19) ou version ultérieure.

Action
ACTION_SHOW_ALARMS
URI de données
Aucun
Type MIME
Aucun

Exemple de filtre d'intent:

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

Agenda

L'ajout d'un événement est une action courante dans les applications d'agenda. Créez un filtre d'intent pour annoncer que votre application peut effectuer cette action à l'aide de la méthode dans la section suivante.

Ajouter un événement d'agenda

Pour ajouter un événement à l'agenda d'un utilisateur, utilisez la ACTION_INSERT et spécifiez l'URI de données à l'aide de Events.CONTENT_URI Vous pouvez ensuite spécifier divers détails de l'événement à l'aide des éléments supplémentaires suivants.

Action
ACTION_INSERT
URI de données
Events.CONTENT_URI
Type MIME
"vnd.android.cursor.dir/event"
Extras
EXTRA_EVENT_ALL_DAY
Valeur booléenne indiquant si l'événement dure toute la journée.
EXTRA_EVENT_BEGIN_TIME
Heure de début de l'événement (en millisecondes depuis l'epoch).
EXTRA_EVENT_END_TIME
Heure de fin de l'événement (millisecondes depuis l'epoch).
TITLE
Titre de l'événement
DESCRIPTION
Description de l'événement.
EVENT_LOCATION
Lieu de l'événement.
EXTRA_EMAIL
Liste des adresses e-mail des participants, séparées par une virgule.

De nombreux autres détails d'événement peuvent être spécifiés à l'aide des constantes définies dans CalendarContract.EventsColumns.

Exemple d'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);
    }
}

Exemple de filtre d'intent:

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

Appareil photo

Vous trouverez ci-dessous des actions courantes pour les applications d'appareil photo, y compris les informations dont vous avez besoin pour créer un filtre d'intent afin d'annoncer que votre application peut effectuer chaque action.

Prenez une photo ou une vidéo et renvoyez-la

Pour ouvrir une application d'appareil photo et recevoir la photo ou la vidéo obtenue, utilisez l'action ACTION_IMAGE_CAPTURE ou ACTION_VIDEO_CAPTURE. Spécifiez également l'URI d'emplacement comme l'appareil photo pour enregistrer la photo ou la vidéo, dans la EXTRA_OUTPUT supplémentaires.

Action
ACTION_IMAGE_CAPTURE ou
ACTION_VIDEO_CAPTURE
Schéma d'URI de données
Aucun
Type MIME
Aucun
Extras
EXTRA_OUTPUT
L'URI de l'emplacement où l'application Appareil photo enregistre la photo ou fichier vidéo (en tant qu'objet Uri).

Lorsque l'application Appareil photo parvient à mettre au point votre activité (en d'autres termes, lorsque votre application reçoit le rappel onActivityResult()), vous pouvez accéder à la photo ou à la vidéo à l'URI que vous avez spécifié avec la valeur EXTRA_OUTPUT.

Remarque:Lorsque vous utilisez ACTION_IMAGE_CAPTURE pour prendre une photo, l'appareil photo peut également renvoyer une copie réduite, ou vignette, de la photo dans le résultat Intent, enregistrée en tant que Bitmap dans un champ supplémentaire nommé "data"

Exemple d'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.
        ...
    }
}

Pour ce faire lorsque vous travaillez sur Android 12 (niveau d'API 31) ou version ultérieure, reportez-vous à l'exemple d'intent suivant.

Exemple d'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>

Pour en savoir plus sur l'utilisation de cet intent pour prendre une photo, y compris comment créer un Uri approprié pour l'emplacement de sortie, consultez Prendre des photos ou Prendre des vidéos.

Exemple de filtre d'intent:

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

Lors du traitement de cet intent, demandez à votre activité de vérifier l'élément EXTRA_OUTPUT supplémentaire dans le Intent entrant, puis enregistrez l'image ou la vidéo capturée au niveau emplacement spécifié par cet extra et appelez setResult() avec un Intent qui inclut une vignette compressée dans un extra nommé "data".

Démarrer une application d'appareil photo en mode Image fixe

Commandes vocales Google

  • "prends une photo"

Pour ouvrir une application d'appareil photo en mode Image fixe, utilisez l'action INTENT_ACTION_STILL_IMAGE_CAMERA.

Action
INTENT_ACTION_STILL_IMAGE_CAMERA
Schéma d'URI de données
Aucun
Type MIME
Aucun
Extras
Aucune

Exemple d'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);
    }
}

Exemple de filtre d'intent:

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

Lancer une application d'appareil photo en mode vidéo

Commandes vocales Google

  • "enregistre une vidéo"

Pour ouvrir une application d'appareil photo en mode vidéo, utilisez l'action INTENT_ACTION_VIDEO_CAMERA.

Action
INTENT_ACTION_VIDEO_CAMERA
Schéma d'URI de données
Aucun
Type MIME
Aucun
Extras
Aucune

Exemple d'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);
    }
}

Exemple de filtre d'intent:

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

Application Contacts/Contacts

Vous trouverez ci-dessous des actions courantes pour les applications de gestion des contacts, y compris les informations dont vous avez besoin pour créer un filtre d'intent afin d'annoncer que votre application peut effectuer chaque action.

Sélectionner un contact

Pour que l'utilisateur sélectionne un contact et permette à votre application d'accéder à toutes les coordonnées, utilisez l'action ACTION_PICK et spécifiez le type MIME pour Contacts.CONTENT_TYPE

Le résultat Intent envoyé à votre rappel onActivityResult() contient le URI content: pointant vers le contact sélectionné. La réponse accorde l'autorisation temporaire de lire ce contact à l'aide de l'API Contacts Provider, même si votre appli n'inclut pas l'autorisation READ_CONTACTS.

Conseil:Si vous n'avez besoin d'accéder qu'à un contact spécifique telles qu'un numéro de téléphone ou une adresse e-mail, consultez la section suivante pour savoir comment sélectionner des données de contact spécifiques.

Action
ACTION_PICK
Schéma d'URI de données
Aucun
Type MIME
Contacts.CONTENT_TYPE

Exemple d'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.
        ...
    }
}

Pour savoir comment récupérer les coordonnées une fois que vous disposez de l'URI du contact, lire Récupérer les détails pour un contact.

Lorsque vous récupérez l'URI de contact à l'aide de cet intent, vous n'avez généralement pas besoin READ_CONTACTS l'autorisation de lire les informations de base de ce contact, comme son nom à afficher et si le contact est ajouté aux favoris. Toutefois, si vous essayez lire des données plus spécifiques sur un contact donné, par exemple comme numéro de téléphone ou adresse e-mail, vous devez disposer du READ_CONTACTS l'autorisation.

Sélectionner des données de contact spécifiques

Permettre à l'utilisateur de sélectionner une information spécifique dans un contact, par exemple un numéro de téléphone, une adresse e-mail ou tout autre type de données, utilisez le ACTION_PICK et spécifiez le type MIME des types de contenus suivants, CommonDataKinds.Phone.CONTENT_TYPE pour obtenir le numéro de téléphone du contact.

Remarque : Dans de nombreux cas, votre application doit disposer de l'autorisation READ_CONTACTS pour afficher des informations spécifiques sur un contact particulier.

Si vous ne devez récupérer qu'un seul type de données à partir d'un contact, cette technique avec un CONTENT_TYPE des classes ContactsContract.CommonDataKinds est plus efficace que d'utiliser Contacts.CONTENT_TYPE, comme indiqué dans la section précédente. Le résultat vous fournit directement aux données souhaitées sans avoir à envoyer une requête plus complexe au fournisseur de contacts.

Le résultat Intent envoyé à votre rappel onActivityResult() contient l'URI content: pointant vers les données de contact sélectionnées. La réponse accorde votre appli des autorisations temporaires de lire ces données de contact, même si elle n'inclut pas l'autorisation READ_CONTACTS.

Action
ACTION_PICK
Schéma d'URI de données
Aucun
Type MIME
CommonDataKinds.Phone.CONTENT_TYPE
Faites votre choix parmi les contacts disposant d'un numéro de téléphone.
CommonDataKinds.Email.CONTENT_TYPE
Faites votre choix parmi les contacts ayant une adresse e-mail.
CommonDataKinds.StructuredPostal.CONTENT_TYPE
Faites votre choix parmi les contacts disposant d'une adresse postale.

Ou l'une des nombreuses autres valeurs CONTENT_TYPE moins de ContactsContract.

Exemple d'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.
            //...
        }
    }
}

Afficher un contact

Pour afficher les détails d'un contact connu, utilisez le ACTION_VIEW et spécifiez le contact avec un URI content: comme données d'intent.

Il existe deux méthodes principales pour récupérer initialement l'URI du contact:

  • Utiliser l'URI de contact renvoyé par l'action ACTION_PICK comme indiqué dans la section précédente. Cette approche ne nécessite aucune autorisation de l'application.
  • Accéder directement à la liste de tous les contacts, comme décrit dans la section Récupérer une liste de des contacts. Cette approche nécessite l'autorisation READ_CONTACTS.
Action
ACTION_VIEW
Schéma d'URI de données
content:<URI>
Type MIME
Aucun. Le type est déduit de l'URI du contact.

Exemple d'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);
    }
}

Modifier un contact existant

Pour modifier un contact connu, utilisez l'action ACTION_EDIT, spécifiez le contact avec un URI content: comme données d'intent et incluez toutes les informations de contact connues dans les extras spécifiés par les constantes dans ContactsContract.Intents.Insert.

Il existe deux méthodes principales pour récupérer initialement l'URI d'un contact:

  • Utiliser l'URI de contact renvoyé par l'action ACTION_PICK comme indiqué dans la section précédente. Cette approche ne nécessite aucune autorisation de l'application.
  • Accédez directement à la liste de tous les contacts, comme décrit dans la section Récupérer une liste de contacts. Cette approche nécessite l'autorisation READ_CONTACTS.
Action
ACTION_EDIT
Schéma d'URI de données
content:<URI>
Type MIME
Le type est déduit de l'URI du contact.
Extras
Un ou plusieurs extras définis dans ContactsContract.Intents.Insert afin que vous puissiez remplir les champs des coordonnées.

Exemple d'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);
    }
}

Pour plus d'informations sur la modification d'un contact, consultez la page Modifier des contacts à l'aide d'intents.

Insérer un contact

Pour insérer un nouveau contact, utilisez l'action ACTION_INSERT, spécifiez Contacts.CONTENT_TYPE comme le type MIME et d'inclure les coordonnées connues dans les extras spécifiés par constantes dans ContactsContract.Intents.Insert.

Action
ACTION_INSERT
Schéma d'URI de données
Aucun
Type MIME
Contacts.CONTENT_TYPE
Extras
Un ou plusieurs extras définis dans ContactsContract.Intents.Insert.

Exemple d'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);
    }
}

Pour en savoir plus sur l'insertion d'un contact, consultez Modifier des contacts à l'aide d'intents.

Adresse e-mail

Rédiger un e-mail avec des pièces jointes facultatives est une action courante dans les applications de messagerie. Créez un filtre d'intent pour annoncer que votre application peut effectuer cette action à l'aide de la méthode dans la section suivante.

Rédiger un e-mail avec des pièces jointes facultatives

Pour rédiger un e-mail, effectuez l'une des actions suivantes, selon que vous incluez des pièces jointes ou non : et inclure les détails de l’e-mail comme le destinataire et l’objet à l’aide des clés supplémentaires indiquées.

Action
ACTION_SENDTO (sans pièce jointe) ou
ACTION_SEND (pour une pièce jointe) ou
ACTION_SEND_MULTIPLE (pour plusieurs pièces jointes)
Schéma d'URI de données
Aucun
Type MIME
"text/plain"
"*/*"
Extras
Intent.EXTRA_EMAIL
Tableau de chaînes contenant tous les termes "To" les adresses e-mail des destinataires.
Intent.EXTRA_CC
Tableau de chaînes contenant tous les sous-titres les adresses e-mail des destinataires.
Intent.EXTRA_BCC
Tableau de chaînes contenant tous les caractères "Cci" les adresses e-mail des destinataires.
Intent.EXTRA_SUBJECT
Chaîne contenant l'objet de l'e-mail.
Intent.EXTRA_TEXT
Chaîne contenant le corps de l'e-mail.
Intent.EXTRA_STREAM
Un Uri pointant vers la pièce jointe. Si vous utilisez la ACTION_SEND_MULTIPLE il s'agit plutôt d'une ArrayList contenant plusieurs objets Uri.

Exemple d'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);
    }
}

Si vous voulez vous assurer que votre intent est géré uniquement par une application de messagerie, et non par une application de chat ou de réseau social, puis utilisez l'action ACTION_SENDTO et incluez le schéma de données "mailto:" comme indiqué dans l'exemple suivant:

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

Exemple de filtre d'intent:

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

Stockage de fichiers

Vous trouverez ci-dessous des actions courantes pour les applications de stockage de fichiers, y compris les informations dont vous avez besoin pour créer un filtre d'intent afin d'annoncer que votre application peut effectuer chaque action.

Récupérer un type de fichier spécifique

Pour demander à l'utilisateur de sélectionner un fichier tel qu'un document ou une photo et de renvoyer une référence à votre application, utilisez l'action ACTION_GET_CONTENT et spécifiez Type MIME. La référence de fichier renvoyée à votre application est temporaire par rapport à la version actuelle de votre activité . Ainsi, si vous souhaitez y accéder plus tard, vous devez en importer une copie que vous pourrez lire plus tard.

Cet intent permet également à l'utilisateur de créer un fichier au cours du processus. Par exemple, au lieu de sélectionner une photo existante, l'utilisateur peut prendre une nouvelle photo avec l'appareil photo.

L'intent de résultat envoyé à votre méthode onActivityResult() inclut des données avec un URI pointant vers le fichier. L'URI peut correspondre à n'importe quel élément, tel qu'un URI http:, un URI file: ou content:. URI. Toutefois, si vous souhaitez limiter les fichiers sélectionnables à ceux qui sont accessibles provenant d'un fournisseur de contenu (un URI content:) et disponibles en tant que flux de fichiers avec openFileDescriptor(), ajouter la catégorie CATEGORY_OPENABLE à votre intent.

Sur Android 4.3 (niveau d'API 18) ou version ultérieure, vous pouvez également permettre à l'utilisateur de sélectionner plusieurs fichiers en ajoutant EXTRA_ALLOW_MULTIPLE à l'intent, défini sur true. Vous pouvez ensuite accéder à chacun des fichiers sélectionnés dans un ClipData objet renvoyé par getClipData().

Action
ACTION_GET_CONTENT
Schéma d'URI de données
Aucun
Type MIME
Type MIME correspondant au type de fichier que l'utilisateur doit sélectionner.
Extras
EXTRA_ALLOW_MULTIPLE
Valeur booléenne indiquant si l'utilisateur peut sélectionner plusieurs fichiers à la fois.
EXTRA_LOCAL_ONLY
Valeur booléenne indiquant si le fichier renvoyé doit être disponible directement l'appareil, au lieu de devoir le télécharger à partir d'un service distant.
Catégorie (facultatif)
CATEGORY_OPENABLE
Pour ne renvoyer que le mot "ouvert" qui peuvent être représentés sous forme de flux de fichiers avec openFileDescriptor().

Exemple d'intention pour obtenir une photo:

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

Exemple de filtre d'intent permettant de renvoyer une photo:

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

Ouvrir un type de fichier spécifique

Au lieu de récupérer une copie d'un fichier que vous devez importer dans votre application à l'aide de l'action ACTION_GET_CONTENT, lorsque vous exécutez votre application sur Android 4.4 ou version ultérieure, vous pouvez demander à ouvrir un fichier géré par une autre application à l'aide de l'action ACTION_OPEN_DOCUMENT et en spécifiant un type MIME. Pour autoriser l'utilisateur à créer un document sur lequel votre application peut écrire, utilisez plutôt l'action ACTION_CREATE_DOCUMENT.

Par exemple, au lieu de à partir des documents PDF existants, le ACTION_CREATE_DOCUMENT L'intent permet aux utilisateurs de choisir où ils souhaitent créer un document, par exemple dans une autre application. qui gère le stockage du document. Votre application reçoit ensuite l'URI d'emplacement peuvent écrire le nouveau document.

tandis que l'intent transmis à votre onActivityResult() de l'action ACTION_GET_CONTENT peut renvoie un URI de n'importe quel type (l'intent de résultat de ACTION_OPEN_DOCUMENT). et ACTION_CREATE_DOCUMENT spécifient toujours le fichier choisi en tant qu'URI content: s'appuyant sur un DocumentsProvider. Vous pouvez ouvrir le avec openFileDescriptor() et interroger ses détails à l'aide des colonnes de DocumentsContract.Document.

L'URI renvoyé accorde à votre application un accès en lecture au fichier à long terme, avec un accès en écriture. L'action ACTION_OPEN_DOCUMENT est particulièrement utile lorsque vous souhaitez lire un fichier existant sans en créer une copie dans votre application ou lorsque vous voulez ouvrir et modifier un fichier sur place.

Vous pouvez également autoriser l'utilisateur à sélectionner plusieurs fichiers en ajoutant EXTRA_ALLOW_MULTIPLE à l'intent, défini sur true. Si l'utilisateur ne sélectionne qu'un seul élément, vous pouvez le récupérer à partir de getData(). Si l'utilisateur sélectionne plusieurs éléments, getData() renvoie la valeur "null", et vous devez à la place récupérer chaque élément d'un ClipData qui est renvoyé par getClipData().

Remarque:Votre intent doit spécifier un type MIME et doit déclarer la catégorie CATEGORY_OPENABLE. Si vous pouvez spécifier plusieurs types MIME en ajoutant un tableau de types MIME avec le paramètre EXTRA_MIME_TYPES supplémentaires. Dans ce cas, vous devez définir la valeur le type MIME principal de setType() à "*/*".

Action
ACTION_OPEN_DOCUMENT ou
ACTION_CREATE_DOCUMENT
Schéma d'URI de données
Aucun
Type MIME
Type MIME correspondant au type de fichier que l'utilisateur doit sélectionner.
Extras
EXTRA_MIME_TYPES
Tableau des types MIME correspondant aux types de fichiers de votre application demande. Lorsque vous utilisez cet extra, vous devez définir le type MIME principal dans De setType() à "*/*".
EXTRA_ALLOW_MULTIPLE
Valeur booléenne indiquant si l'utilisateur peut sélectionner plusieurs fichiers à la fois.
EXTRA_TITLE
À utiliser avec ACTION_CREATE_DOCUMENT pour spécifier un nom de fichier initial.
EXTRA_LOCAL_ONLY
Valeur booléenne indiquant si le fichier renvoyé doit être disponible directement l'appareil, au lieu de devoir le télécharger à partir d'un service distant.
Catégorie
CATEGORY_OPENABLE
Pour ne renvoyer que le mot "ouvert" qui peuvent être représentés sous forme de flux de fichiers avec openFileDescriptor().

Exemple d'intention pour obtenir une photo:

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

Les applications tierces ne peuvent pas répondre à un intent avec l'action ACTION_OPEN_DOCUMENT. Le système reçoit à la place et affiche tous les fichiers disponibles dans différentes applications dans une interface utilisateur unifiée.

Pour fournir les fichiers de votre application dans cette interface utilisateur et permettre à d'autres applications de les ouvrir, vous devez implémenter un DocumentsProvider et inclure un filtre d'intent pour PROVIDER_INTERFACE ("android.content.action.DOCUMENTS_PROVIDER"), comme illustré dans l'exemple suivant:

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

Pour savoir comment rendre les fichiers gérés par votre application pouvant être ouverts à partir d'autres applications, consultez Ouvrir des fichiers à l'aide de Storage Access Framework.

Actions locales

Appeler un véhicule est une action locale courante. Créez un filtre d'intent pour promouvoir d'effectuer cette action à l'aide des informations fournies dans la section suivante.

Appeler un taxi

Commandes vocales Google

  • "trouver un taxi"
  • "appelle-moi une voiture"

(Wear OS uniquement)

Pour appeler un taxi, utilisez le ACTION_RESERVE_TAXI_RESERVATION action.

Remarque:Les applications doivent demander la confirmation de l'utilisateur. avant d'effectuer cette action.

Action
ACTION_RESERVE_TAXI_RESERVATION
URI de données
Aucun
Type MIME
Aucun
Extras
Aucune

Exemple d'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);
    }
}

Exemple de filtre d'intent :

<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

Afficher un emplacement sur une carte est une action courante dans les applications de cartographie. Créez un filtre d'intent pour annoncer que votre application peut effectuer cette action à l'aide de la méthode dans la section suivante.

Afficher un lieu sur une carte

Pour ouvrir une carte, utilisez l'action ACTION_VIEW et spécifiez les informations de localisation dans les données d'intent avec l'un des schémas suivants.

Action
ACTION_VIEW
Schéma d'URI de données
geo:latitude,longitude
Afficher la carte avec la longitude et la latitude spécifiées

Exemple : "geo:47.6,-122.3"

geo:latitude,longitude?z=zoom
Affichez la carte avec la longitude et la latitude données à un certain niveau de zoom. Un niveau de zoom de 1 représente la Terre entière, centrée sur les valeurs lat,lng données. Le plus élevé le niveau de zoom (le plus proche) est 23.

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

geo:0,0?q=lat,lng(label)
Affichez la carte à la longitude et à la latitude données à l'aide d'une chaîne de libellé.

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

geo:0,0?q=my+street+address
Affichez l'emplacement correspondant à "mon adresse postale", qui peut être une adresse ou une requête de localisation spécifique.

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

Remarque : Toutes les chaînes transmises dans l'URI geo doivent être encodées. Par exemple, la chaîne 1st & Pike, Seattle devient 1st%20%26%20Pike%2C%20Seattle. Les espaces dans la chaîne sont encodés avec %20 ou remplacé par le signe plus (+).

Type MIME
Aucun

Exemple d'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);
    }
}

Exemple de filtre d'intent:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <data android:scheme="geo" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Musique ou vidéo

Vous trouverez ci-dessous des actions courantes pour les applications musicales et vidéo, y compris les informations dont vous avez besoin pour créer un filtre d'intent afin d'annoncer que votre application peut effectuer chaque action.

Lire un fichier multimédia

Pour lire un fichier musical, utilisez l'action ACTION_VIEW et spécifiez l'emplacement URI du fichier dans les données d'intent.

Action
ACTION_VIEW
Schéma d'URI de données
file:<URI>
content:<URI>
http:<URL>
Type MIME
"audio/*"
"application/ogg"
"application/x-ogg"
"application/itunes"
ou toute autre autorisation requise par votre application.

Exemple d'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);
    }
}

Exemple de filtre d'intent:

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

Écouter de la musique en fonction d'une requête de recherche

Commandes vocales Google

  • "mets michael jackson billie jean"

Pour écouter de la musique en fonction d'une requête de recherche, utilisez le bouton Intent INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH. Une application peut se déclencher cet intent en réponse à la commande vocale de l'utilisateur pour écouter de la musique. L'application destinataire de cet intent effectue une recherche dans son inventaire pour faire correspondre le contenu existant à la requête donnée et commence à lire ce contenu.

Dans cet intent, incluez la chaîne EXTRA_MEDIA_FOCUS. extra, qui spécifie le mode de recherche souhaité. Par exemple, le mode de recherche peut spécifier si la recherche porte sur un nom d'artiste ou de chanson.

Action
INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH
Schéma d'URI de données
Aucun
Type MIME
Aucun
Extras
MediaStore.EXTRA_MEDIA_FOCUS (obligatoire)

Indique le mode de recherche : si l'utilisateur recherche un artiste, un album, un titre ou une playlist en particulier. La plupart des modes de recherche nécessitent des options supplémentaires. Par exemple, si l'utilisateur s'intéresse à un titre en particulier, l'intent peut comporter trois extras supplémentaires: le titre de la chanson, l'artiste et l'album. Cet intent prend en charge les modes de recherche suivants pour chaque valeur de EXTRA_MEDIA_FOCUS:

Toutes - "vnd.android.cursor.item/*"

Écoutez de la musique. L'application réceptrice lit de la musique en fonction d'un choix intelligent tel que comme dernière playlist écoutée par l'utilisateur.

Extras supplémentaires:

  • QUERY (obligatoire) : chaîne vide. Cet élément supplémentaire est toujours fourni pour assurer la rétrocompatibilité. Les applications existantes qui ne connaissent pas les modes de recherche peuvent traiter cet intent comme une recherche non structurée.

Non structuré"vnd.android.cursor.item/*"

Lire un titre, un album ou un genre spécifique à partir d'une requête de recherche non structurée Les applications peuvent générer un intent avec ce mode de recherche lorsqu'il ne peut pas identifier le type de contenu que l'utilisateur souhaite écouter. Utilisez des modes de recherche plus spécifiques lorsque cela est possible.

Autres avantages :

  • QUERY (obligatoire) : chaîne contenant une combinaison de l'artiste, de l'album, du titre ou du genre.

Genre : Audio.Genres.ENTRY_CONTENT_TYPE

Écouter de la musique d'un genre particulier.

Extras supplémentaires:

  • "android.intent.extra.genre" (obligatoire) : genre.
  • QUERY (obligatoire): genre. Cet extra est toujours fourni pour assurer la rétrocompatibilité. Les applis existantes qui ne connaissent pas les modes de recherche peuvent traiter comme une recherche non structurée.

ArtisteAudio.Artists.ENTRY_CONTENT_TYPE

Écouter la musique d'un artiste spécifique

Autres avantages :

  • EXTRA_MEDIA_ARTIST (obligatoire): artiste.
  • "android.intent.extra.genre": genre.
  • QUERY (obligatoire) : chaîne contenant toute combinaison des éléments suivants : l'artiste ou le genre. Cet élément supplémentaire est toujours fourni pour assurer la rétrocompatibilité. Les applis existantes qui ne connaissent pas les modes de recherche peuvent traiter cet intent en tant qu'intent non structuré recherche.

AlbumAudio.Albums.ENTRY_CONTENT_TYPE

Lire de la musique d'un album spécifique

Extras supplémentaires:

  • EXTRA_MEDIA_ALBUM (obligatoire) : l'album.
  • EXTRA_MEDIA_ARTIST: artiste.
  • "android.intent.extra.genre": genre.
  • QUERY (obligatoire) : chaîne contenant n'importe quelle combinaison de l'album ou de l'artiste. Cet extra est toujours fourni pour les et la compatibilité avec d'autres appareils. Les applis existantes qui ne connaissent pas les modes de recherche peuvent traiter cet intent en tant que recherche non structurée.

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

Lire un titre spécifique.

Extras supplémentaires:

  • EXTRA_MEDIA_ALBUM : l'album.
  • EXTRA_MEDIA_ARTIST: artiste.
  • "android.intent.extra.genre": genre.
  • EXTRA_MEDIA_TITLE (obligatoire): nom du titre.
  • QUERY (obligatoire) : chaîne contenant toute combinaison des éléments suivants : l'album, l'artiste, le genre ou le titre. Cet extra est toujours fourni pour rétrocompatibilité. Les applis existantes qui ne connaissent pas les modes de recherche peuvent traiter cela. comme une recherche non structurée.

PlaylistAudio.Playlists.ENTRY_CONTENT_TYPE

Lire une playlist spécifique ou une playlist qui correspond à certains critères spécifiés en ajoutant des éléments supplémentaires.

Extras supplémentaires:

  • EXTRA_MEDIA_ALBUM : album.
  • EXTRA_MEDIA_ARTIST: artiste.
  • "android.intent.extra.genre": genre.
  • "android.intent.extra.playlist": playlist.
  • EXTRA_MEDIA_TITLE: nom du titre faisant partie de la playlist. sur la base de ces données.
  • QUERY (obligatoire): chaîne contenant n'importe quelle combinaison. de l'album, de l'artiste, du genre, de la playlist ou du titre. Cet extra est toujours fournies pour assurer la rétrocompatibilité. Les applications existantes qui ne connaissent pas les modes de recherche peuvent traiter cet intent comme une recherche non structurée.

Exemple d'intent:

Si l'utilisateur souhaite écouter de la musique d'un artiste en particulier, une application de recherche peut générer l'intent suivant :

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

Exemple de filtre d'intent:

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

Lorsque vous gérez cet intent dans votre activité, vérifiez la valeur de l'élément supplémentaire EXTRA_MEDIA_FOCUS dans le Intent entrant pour déterminer le mode de recherche. Une fois que votre activité a été identifiée le mode de recherche, lisez les valeurs des extras supplémentaires pour ce mode de recherche spécifique. Avec ces informations, votre application peut alors effectuer la recherche dans son inventaire pour lire le contenu correspondant à la requête de recherche. Ce processus est illustré dans l'exemple suivant.

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

Nouvelle note

La création d'une note est une action courante dans les applications de prise de notes. Créez un filtre d'intent pour annoncer que votre application peut effectuer cette action à l'aide de la méthode dans la section suivante.

Créer une note

Pour créer une note, utilisez les ACTION_CREATE_NOTE et spécifiez les détails de la note, comme l'objet et le texte, à l'aide des extras suivants.

Remarque:Les applications doivent demander la confirmation de l'utilisateur. avant d'effectuer cette action.

Action
ACTION_CREATE_NOTE
Schéma d'URI de données
Aucun
Type MIME
PLAIN_TEXT_TYPE
*/*
Extras
EXTRA_NAME
Chaîne indiquant le titre ou l'objet de la note.
EXTRA_TEXT
Chaîne indiquant le texte de la note.

Exemple d'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);
    }
}

Exemple de filtre d'intent:

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

Téléphone

Lancer un appel est une action courante pour les applications pour téléphone. Créez un filtre d'intent pour annoncer que votre application peut effectuer cette action à l'aide de la méthode dans la section suivante.

Appel téléphonique

Pour ouvrir l'application Téléphone et composer un numéro de téléphone, utilisez l'action ACTION_DIAL et spécifiez un numéro de téléphone à l'aide du schéma d'URI suivant. Lorsque l'application Téléphone s'ouvre, elle affiche le numéro de téléphone, et l'utilisateur doit appuyer sur le bouton Appeler pour démarrer l'appel téléphonique.

Commandes vocales Google

  • "Appeler le 06 05 55 55 55"
  • "appeler bob"
  • "appeler la messagerie vocale"

Pour passer un appel téléphonique directement, utilisez l'action ACTION_CALL. et spécifiez un numéro de téléphone à l'aide du schéma d'URI suivant. Lorsque l'application pour téléphone s'ouvre, démarre l'appel téléphonique. L'utilisateur n'a pas besoin d'appuyer sur le bouton Appeler.

L'action ACTION_CALL nécessite que vous ajoutiez l'autorisation CALL_PHONE à votre fichier manifeste :

<uses-permission android:name="android.permission.CALL_PHONE" />
Action
  • ACTION_DIAL : ouvre l'application Téléphone ou Téléphone.
  • ACTION_CALL - Passe un appel téléphonique (nécessite le Autorisation CALL_PHONE)
Schéma d'URI de données
  • tel:<phone-number>
  • voicemail:<phone-number>
Type MIME
Aucun

Les numéros de téléphone valides sont ceux dans le document RFC 3966 de l'IETF. Voici quelques exemples valides:

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

Le clavier de l'application Téléphone est capable de normaliser les schémas, par exemple numéros de téléphone. Par conséquent, le schéma décrit n'est pas strictement obligatoire dans la méthode Uri.parse(). Toutefois, si vous n'avez pas essayé de schéma ou si vous ne savez pas s'il peut être géré, utilisez plutôt la méthode Uri.fromParts().

Exemple d'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);
    }
}

Vous trouverez ci-dessous des actions courantes pour les applications de recherche, y compris les informations dont vous avez besoin pour créer un filtre d'intent afin d'annoncer que votre application peut effectuer chaque action.

Rechercher à l'aide d'une application spécifique

Commandes vocales Google

  • "Recherche des vidéos de chats sur monapplicationvidéo"

Pour prendre en charge la recherche dans le contexte de votre appli, déclarez un filtre d'intent dans votre appli avec l'action SEARCH_ACTION, comme illustré dans l'exemple de filtre d'intent suivant.

Remarque : Nous vous déconseillons d'utiliser SEARCH_ACTION pour la recherche d'applications. Implémentez plutôt GET_THING pour profiter de la compatibilité de l'Assistant Google avec la recherche dans l'application. Pour en savoir plus, consultez l'Assistant Google Documentation sur les actions dans les applications.

Action
"com.google.android.gms.actions.SEARCH_ACTION"
Acceptez les requêtes de recherche provenant des commandes vocales Google.
Extras
QUERY
Chaîne contenant la requête de recherche.

Exemple de filtre d'intent:

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

Effectuer une recherche sur le Web

Pour lancer une recherche sur le Web, utilisez l'action ACTION_WEB_SEARCH et spécifiez la chaîne de recherche dans SearchManager.QUERY supplémentaire

Action
ACTION_WEB_SEARCH
Schéma d'URI de données
Aucun
Type MIME
Aucun
Extras
SearchManager.QUERY
Chaîne de recherche.

Exemple d'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);
    }
}

Paramètres

Pour ouvrir un écran dans l'application Paramètres système lorsque votre application nécessite que l'utilisateur modifie quelque chose, utilisez l'une des actions d'intent suivantes :

Action
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

Pour découvrir les autres écrans de paramètres disponibles, consultez la documentation Settings .

Schéma d'URI de données
Aucun
Type MIME
Aucun

Exemple d'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);
    }
}

Envoi de SMS

La rédaction d'un SMS/MMS avec une pièce jointe est une action courante dans les applications de messagerie texte. Créez un filtre d'intent pour annoncer la capacité de votre application à effectuer cette action à l'aide des informations de la section suivante.

Rédiger un SMS/MMS avec une pièce jointe

Pour lancer un SMS ou un MMS, utilisez l'une des actions d'intent suivantes et spécifiez le message des détails tels que le numéro de téléphone, l'objet et le corps du message à l'aide des touches supplémentaires suivantes.

Action
ACTION_SENDTO ou
ACTION_SEND ou
ACTION_SEND_MULTIPLE
Schéma d'URI de données
sms:<phone_number>
smsto:<phone_number>
mms:<phone_number>
mmsto:<phone_number>

Ces schémas sont tous gérés de la même manière.

Type MIME
"text/plain"
"image/*"
"video/*"
Extras
"subject"
Chaîne de l'objet du message (généralement pour les MMS uniquement).
"sms_body"
Chaîne du message textuel.
EXTRA_STREAM
Un Uri pointant vers l'image ou la vidéo à joindre. Si vous utilisez l'action ACTION_SEND_MULTIPLE, cet extra est un ArrayList de Objets Uri pointant vers les images ou les vidéos à joindre.

Exemple d'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);
    }
}

Si vous souhaitez vous assurer que votre intent n'est géré que par une application de messagerie, et non par d'autres applications de messagerie ou de réseaux sociaux, utilisez l'action ACTION_SENDTO et incluez le schéma de données "smsto:", comme illustré dans l'exemple suivant :

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

Exemple de filtre d'intent :

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

Remarque:Si vous développez une application de SMS/MMS, vous devez implémenter des filtres d'intent pour plusieurs actions supplémentaires afin d'être disponible application SMS par défaut sur Android 4.4 ou version ultérieure Pour en savoir plus, consultez la documentation à Telephony.

Navigateur Web

Le chargement d'une URL Web est une action courante dans les applications de navigateur Web. Créez un filtre d'intent pour annoncer la capacité de votre application à effectuer cette action à l'aide des informations de la section suivante.

Charger une URL Web

Commandes vocales Google

  • "ouvre example.com"

Pour ouvrir une page Web, utilisez l'action ACTION_VIEW et spécifiez l'URL Web dans les données d'intent.

Action
ACTION_VIEW
Schéma d'URI de données
http:<URL>
https:<URL>
Type MIME
"text/plain"
"text/html"
"application/xhtml+xml"
"application/vnd.wap.xhtml+xml"

Exemple d'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);
    }
}

Exemple de filtre d'intent:

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

Conseil:Si votre application Android offre des fonctionnalités semblables à votre site Web, incluez un filtre d'intention pour les URL qui pointent vers votre site Web. Ensuite, si des utilisateurs ont installé votre application, ou si des liens d'e-mails ou d'autres pages Web renvoient vers votre site Web ; ouvrez votre application Android au lieu de votre page Web. Pour en savoir plus, consultez Gérer Android App Links

À partir d'Android 12 (niveau d'API 31), un intent Web générique renvoie vers un l'activité dans votre application uniquement si celle-ci est approuvée pour le domaine concerné contenus dans cet intent Web. Si votre application n'est pas approuvée pour le domaine, le Web est résolu sur l'application de navigateur par défaut de l'utilisateur.

Valider les intents avec Android Debug Bridge

Pour vérifier que votre application répond aux intents que vous souhaitez prendre en charge, vous pouvez utiliser la L'outil adb pour déclencher des intents spécifiques les éléments suivants:

  1. Configurer un appareil Android pour le développement ou utiliser un appareil virtuel.
  2. Installez une version de votre application qui gère les intents que vous souhaitez prendre en charge.
  3. Déclenchez un intent à l'aide de adb:
    adb shell am start -a <ACTION> -t <MIME_TYPE> -d <DATA> \
      -e <EXTRA_NAME> <EXTRA_VALUE> -n <ACTIVITY>
    

    Exemple :

    adb shell am start -a android.intent.action.DIAL \
      -d tel:555-5555 -n org.example.MyApp/.MyActivity
    
  4. Si vous définissez les filtres d'intent requis, gérez l'intent.

Pour en savoir plus, consultez Émettez des commandes shell.