Android utilise les intents et les extras associés pour permettre aux utilisateurs de partager des informations rapidement et facilement à l'aide de leurs applications préférées.
Android propose deux méthodes aux utilisateurs pour partager des données entre les applications :
- La Sharesheet Android est principalement conçue pour envoyer du contenu en dehors de votre application et/ou directement à un autre utilisateur. Par exemple, partager une URL avec un ami.
- Le résolveur d'intent Android est le mieux adapté pour transmettre des données à l'étape suivante d'une tâche bien définie. Par exemple, vous pouvez ouvrir un PDF depuis votre application et laisser les utilisateurs choisir leur visionneuse préférée.
Lorsque vous créez un intent, vous spécifiez l'action qu'il doit effectuer.
Android utilise l'action ACTION_SEND
d'envoyer des données
d'une activité à une autre,
même au-delà des limites des processus. Vous devez spécifier
les données et leur type. Le système identifie automatiquement les activités compatibles pouvant recevoir les données et les affiche à l'utilisateur. Dans le cas du résolveur d'intent, si une seule activité peut gérer l'intent, cette activité démarre immédiatement.
Pourquoi utiliser Android Sharesheet ?

Nous vous recommandons vivement d'utiliser Android Sharesheet pour assurer la cohérence entre les applications de vos utilisateurs. Ne pas afficher la liste des cibles de partage de votre application et ne pas créer la vôtre Variantes Sharesheet.
La Sharesheet Android permet aux utilisateurs de partager des informations avec la bonne personne, avec des suggestions d'applications pertinentes, en un seul geste. Sharesheet peut suggérer des cibles indisponibles pour les solutions personnalisées et utilise un classement cohérent. En effet, la Sharesheet peut prendre en compte les informations sur l’activité de l’application et de l’utilisateur qui n'est disponible que pour le système.
Android Sharesheet offre également de nombreuses fonctionnalités pratiques pour les développeurs. Par exemple, vous pouvez procéder comme suit :
- Découvrez à quel moment vos utilisateurs effectuent un partage et où
- Ajouter un
ChooserTarget
personnalisé et des cibles d'application - Fournir des aperçus de contenu en texte enrichi à partir d'Android 10 (niveau d'API 29)
- Exclure des cibles correspondant à des noms de composants spécifiques
Utiliser Android Sharesheet
Pour tous les types de partage, créez un intent et définissez son action sur Intent.ACTION_SEND
.
Pour afficher Android Sharesheet, appelez
Intent.createChooser()
,
en lui transmettant votre objet Intent
.
Elle renvoie une version de votre intent qui affiche toujours Android Sharesheet.
Envoyer du contenu textuel
L'utilisation la plus simple et la plus courante de Sharesheet Android consiste à envoyer du contenu textuel d'une activité à une autre. Par exemple, la plupart des navigateurs peuvent partager l'URL de la page sous forme de texte avec une autre application. Cela s'avère utile pour partager un article ou un site Web avec des amis via par e-mail ou sur les réseaux sociaux. Voici un exemple:
val sendIntent: Intent = Intent().apply { action = Intent.ACTION_SEND putExtra(Intent.EXTRA_TEXT, "This is my text to send.") type = "text/plain" } val shareIntent = Intent.createChooser(sendIntent, null) startActivity(shareIntent)
Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send."); sendIntent.setType("text/plain"); Intent shareIntent = Intent.createChooser(sendIntent, null); startActivity(shareIntent);
Vous pouvez également ajouter des extras pour inclure plus d'informations, telles que les destinataires de l'e-mail (EXTRA_EMAIL
, EXTRA_CC
, EXTRA_BCC
), l'objet de l'e-mail (EXTRA_SUBJECT
), etc.
Remarque:Certaines applications de messagerie, telles que Gmail, requièrent
String[]
pour des bonus comme
EXTRA_EMAIL
et EXTRA_CC
. Utilisez putExtra(String, String[])
pour les ajouter à votre intent.
Envoyer du contenu binaire
Partagez des données binaires à l'aide de l'action ACTION_SEND
.
Définissez le type MIME approprié et placez un URI pour les données de la section
EXTRA_STREAM
, en tant que
comme illustré dans l'exemple suivant.
Cette méthode est couramment utilisée pour partager une image, mais elle peut également servir à partager n'importe quel type de contenu binaire.
val shareIntent: Intent = Intent().apply { action = Intent.ACTION_SEND // Example: content://com.google.android.apps.photos.contentprovider/... putExtra(Intent.EXTRA_STREAM, uriToImage) type = "image/jpeg" } startActivity(Intent.createChooser(shareIntent, null))
Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND); // Example: content://com.google.android.apps.photos.contentprovider/... shareIntent.putExtra(Intent.EXTRA_STREAM, uriToImage); shareIntent.setType("image/jpeg"); startActivity(Intent.createChooser(shareIntent, null));
L'application réceptrice a besoin d'une autorisation pour accéder aux données du Uri
.
vers lequel pointe l'élément. Pour ce faire, deux méthodes sont recommandées :
- Stockez les données dans votre propre
ContentProvider
, en vous assurant que les autres applications disposent des autorisations appropriées pour accéder à votre fournisseur. Le mécanisme privilégié pour fournir consiste à utiliser des autorisations par URI, qui sont temporaire et n’accorde l’accès qu’à l’application réceptrice. Un moyen simple de créerContentProvider
comme ceci consiste à utiliser la Classe d'assistanceFileProvider
. - Utilisez le système
MediaStore
.MediaStore
est principalement destiné aux types MIME des vidéos, de l'audio et des images. Toutefois, à partir d'Android 3.0 (niveau d'API 11), il peut également stocker des types non multimédias. Pour en savoir plus, consultezMediaStore.Files
Les fichiers peuvent être insérés dans leMediaStore
à l'aide descanFile()
, après quoi uneUri
de stylecontent://
pouvant être partagé est transmis au fournisseuronScanCompleted()
. Notez qu'une fois ajouté au systèmeMediaStore
, le contenu est accessible aux n'importe quelle application de l'appareil.
Utiliser le bon type MIME
Indiquez le type MIME le plus spécifique disponible pour les données que vous envoyez. Par exemple, utilisez text/plain
lorsque vous partagez du texte brut. En voici quelques-unes
types MIME courants lors de l'envoi de données simples dans Android:
Les destinataires s'inscrivent à | Expéditeurs |
---|---|
text/* |
|
`image/*` |
|
video/* |
|
Extensions de fichier compatibles | application/pdf |
Pour en savoir plus sur les types MIME, consultez le registre officiel des types de médias MIME de l'IANA.
Android Sharesheet peut afficher un aperçu du contenu, en fonction du type MIME fourni. Un peu les fonctionnalités en preview ne sont disponibles que pour des types spécifiques.
Partager plusieurs éléments de contenu
Pour partager plusieurs contenus, utilisez l'ACTION_SEND_MULTIPLE
associée à une liste d'URI pointant vers le contenu. Le type MIME varie en fonction du mélange de contenus que vous partagez. Par exemple, si vous partagez trois images JPEG, vous utilisez le type "image/jpg"
. Pour un mélange de types d'images, utilisez "image/*"
pour faire correspondre une activité qui gère n'importe quel type d'image. Bien qu'il soit possible de partager différents types de fichiers, nous vous déconseillons vivement de le faire, car le destinataire ne sait pas clairement ce qui est censé être envoyé. S'il est nécessaire d'envoyer plusieurs types, utilisez
"*/*"
C'est à l'application réceptrice d'analyser
et traiter vos données. Exemple :
val imageUris: ArrayList<Uri> = arrayListOf( // Add your image URIs here imageUri1, imageUri2 ) val shareIntent = Intent().apply { action = Intent.ACTION_SEND_MULTIPLE putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris) type = "image/*" } startActivity(Intent.createChooser(shareIntent, null))
ArrayList<Uri> imageUris = new ArrayList<Uri>(); imageUris.add(imageUri1); // Add your image URIs here imageUris.add(imageUri2); Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE); shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris); shareIntent.setType("image/*"); startActivity(Intent.createChooser(shareIntent, null));
Assurez-vous que les objets Uri
fournis pointent
aux données auxquelles une application réceptrice peut accéder.
Ajouter du contenu enrichi aux aperçus de texte
À partir d'Android 10 (niveau d'API 29), Android Sharesheet affiche un aperçu du texte en cours
partagés. Dans certains cas, le texte partagé peut être difficile à comprendre. Envisagez de partager une
une URL complexe, comme https://www.google.com/search?ei=2rRVXcLkJajM0PEPoLy7oA4
. Un aperçu plus détaillé peut rassurer vos utilisateurs sur ce qui est partagé.
Si vous prévisualisez du texte, vous pouvez définir un titre, une vignette ou les deux. Ajoutez une description à
Intent.EXTRA_TITLE
avant d'appeler Intent.createChooser()
, puis ajoutez un
miniature pertinente à l'aide de ClipData
.
Remarque:L'URI du contenu de l'image est fourni à partir d'un
FileProvider
, généralement à partir d'un <cache-path>
configuré.
Pour en savoir plus, consultez Partager des fichiers. Assurez-vous de donner
Sharesheet les autorisations appropriées pour lire toute image que vous souhaitez utiliser comme miniature. Pour plus d'informations,
voir Intent.FLAG_GRANT_READ_URI_PERMISSION
.
Exemple :
val share = Intent.createChooser(Intent().apply { action = Intent.ACTION_SEND putExtra(Intent.EXTRA_TEXT, "https://developer.android.com/training/sharing/") // (Optional) Here you're setting the title of the content putExtra(Intent.EXTRA_TITLE, "Introducing content previews") // (Optional) Here you're passing a content URI to an image to be displayed data = contentUri flags = Intent.FLAG_GRANT_READ_URI_PERMISSION }, null) startActivity(share)
Intent sendIntent = new Intent(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, "https://developer.android.com/training/sharing/"); // (Optional) Here you're setting the title of the content sendIntent.putExtra(Intent.EXTRA_TITLE, "Introducing content previews"); // (Optional) Here you're passing a content URI to an image to be displayed sendIntent.setData(contentUri); sendIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // Show the Sharesheet startActivity(Intent.createChooser(sendIntent, null));
L'aperçu ressemble à ceci:

Ajouter des actions personnalisées à la Sharesheet

Capture d'écran des actions personnalisées dans la Sharesheet Android.
Sur Android 14 (niveau d'API 34) ou version ultérieure, les applications peuvent ajouter des actions personnalisées à Android Sharesheet.
Les actions personnalisées sont affichées sous la forme de petites icônes d'action en haut de l'Android Sharesheet, et les applications
Vous pouvez spécifier n'importe quel Intent
comme action appelée lorsque l'utilisateur clique sur l'icône.
Pour ajouter des actions personnalisées à Android Sharesheet, créez d'abord un
ChooserAction
avec
ChooserAction.Builder
Vous pouvez spécifier un PendingIntent
comme action appelée lorsque l'utilisateur clique sur l'icône. Créer
un tableau contenant toutes vos actions personnalisées et le spécifier en tant que
EXTRA_CHOOSER_CUSTOM_ACTIONS
de la part Intent
.
val sendIntent = Intent(Intent.ACTION_SEND) .setType("text/plain") .putExtra(Intent.EXTRA_TEXT, text) val shareIntent = Intent.createChooser(sendIntent, null) val customActions = arrayOf( ChooserAction.Builder( Icon.createWithResource(context, R.drawable.ic_custom_action), "Custom", PendingIntent.getBroadcast( context, 1, Intent(Intent.ACTION_VIEW), PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_CANCEL_CURRENT ) ).build() ) shareIntent.putExtra(Intent.EXTRA_CHOOSER_CUSTOM_ACTIONS, customActions) context.startActivity(shareIntent)
Intent sendIntent = new Intent(Intent.ACTION_SEND) .setType("text.plain") .putExtra(Intent.EXTRA_TEXT, text); Intent shareIntent = Intent.createChooser(sendIntent, null); ChooserAction[] actions = new ChooserAction[]{ new ChooserAction.Builder( Icon.createWithResource(context, R.drawable.ic_custom_action), "Custom", PendingIntent.getBroadcast( context, 1, new Intent(Intent.ACTION_VIEW), PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_CANCEL_CURRENT ) ).build() }; shareIntent.putExtra(Intent.EXTRA_CHOOSER_CUSTOM_ACTIONS, actions); context.startActivity(shareIntent);
Ajouter des cibles personnalisées
La Sharesheet Android vous permet de spécifier jusqu'à deux objets ChooserTarget
qui s'affichent avant les raccourcis de partage et les cibles de sélecteur chargés à partir de ChooserTargetServices
. Vous pouvez également spécifier jusqu'à deux intents pointant vers des activités listées avant les suggestions d'applications :

Ajoutez Intent.EXTRA_CHOOSER_TARGETS
et Intent.EXTRA_INITIAL_INTENTS
à votre intent de partage après avoir appelé Intent.createChooser()
:
val share = Intent.createChooser(myShareIntent, null).apply { putExtra(Intent.EXTRA_CHOOSER_TARGETS, myChooserTargetArray) putExtra(Intent.EXTRA_INITIAL_INTENTS, myInitialIntentArray) }
Intent shareIntent = Intent.createChooser(sendIntent, null); share.putExtra(Intent.EXTRA_CHOOSER_TARGETS, myChooserTargetArray); share.putExtra(Intent.EXTRA_INITIAL_INTENTS, myInitialIntentArray);
Utilisez cette fonctionnalité avec précaution. Chaque Intent
et ChooserTarget
personnalisés que vous ajoutez réduit le nombre suggéré par le système. Nous déconseillons généralement d'ajouter des cibles personnalisées. Un exemple courant
approprié d'ajout
Intent.EXTRA_INITIAL_INTENTS
permet de fournir des actions supplémentaires que les utilisateurs peuvent effectuer sur les
contenus. Par exemple, un utilisateur partage des images et Intent.EXTRA_INITIAL_INTENTS
lui permet d'envoyer un lien à la place. Exemple courant d'ajout de Intent.EXTRA_CHOOSER_TARGETS
consiste à mettre en avant les utilisateurs
ou les appareils pertinents proposés par votre application.
Exclure des cibles spécifiques par composant
Vous pouvez exclure des cibles spécifiques en fournissant Intent.EXTRA_EXCLUDE_COMPONENTS
.
Ne le faites que pour supprimer les cibles que vous contrôlez. Un cas d'utilisation courant consiste à masquer
cibles de partage de l'application lorsque les utilisateurs la partagent à partir de celle-ci, car leur intention est susceptible de partager
en dehors de votre application.
Ajoutez Intent.EXTRA_EXCLUDE_COMPONENTS
à votre intent après avoir appelé Intent.createChooser()
:
val share = Intent.createChooser(Intent(), null).apply { // Only use for components you have control over val excludedComponentNames = arrayOf(ComponentName("com.example.android", "ExampleClass")) putExtra(Intent.EXTRA_EXCLUDE_COMPONENTS, excludedComponentNames) }
Intent shareIntent = Intent.createChooser(new Intent(), null); // Only use for components you have control over ComponentName[] excludedComponentNames = { new ComponentName("com.example.android", "ExampleClass") }; shareIntent.putExtra(Intent.EXTRA_EXCLUDE_COMPONENTS, excludedComponentNames);
Obtenir des informations sur le partage
Il peut être utile de savoir quand vos utilisateurs partagent du contenu et quelle cible ils sélectionnent. La
Android Sharesheet vous permet d'obtenir ces informations en fournissant le ComponentName
de
les cibles sélectionnées par vos utilisateurs à l'aide d'un IntentSender
.
Commencez par créer un PendingIntent
pour un BroadcastReceiver
et fournissez son IntentSender
dans Intent.createChooser()
:
var share = Intent(Intent.ACTION_SEND) // ... val pi = PendingIntent.getBroadcast( myContext, requestCode, Intent(myContext, MyBroadcastReceiver::class.java), PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_UPDATE_CURRENT ) share = Intent.createChooser(share, null, pi.intentSender)
Intent share = new Intent(ACTION_SEND); ... PendingIntent pi = PendingIntent.getBroadcast(myContext, requestCode, new Intent(myContext, MyBroadcastReceiver.class), PendingIntent.FLAG_MUTABLE | PendingIntent.FLAG_UPDATE_CURRENT); share = Intent.createChooser(share, null, pi.getIntentSender());
Recevez le rappel dans MyBroadcastReceiver
et recherchez dans Intent.EXTRA_CHOSEN_COMPONENT
:
override fun onReceive(context: Context, intent: Intent) { ... val clickedComponent : ComponentName = intent.getParcelableExtra(EXTRA_CHOSEN_COMPONENT); }
@Override public void onReceive(Context context, Intent intent) { ... ComponentName clickedComponent = intent.getParcelableExtra(EXTRA_CHOSEN_COMPONENT); }
Ajouter des actions personnalisées à la Sharesheet
Sur Android 14 (niveau d'API 34) ou version ultérieure, les applications peuvent ajouter des actions personnalisées à Android Sharesheet.
Créer un ChooserAction
avec
ChooserAction.Builder
Vous pouvez spécifier un PendingIntent
comme action appelée lorsque l'utilisateur clique sur l'icône. Créer
un tableau contenant toutes vos actions personnalisées et le spécifier en tant que
EXTRA_CHOOSER_CUSTOM_ACTIONS
de la part Intent
.
val sendIntent = Intent(Intent.ACTION_SEND) .setType("text/plain") .putExtra(Intent.EXTRA_TEXT, text) val shareIntent = Intent.createChooser(sendIntent, null) val customActions = arrayOf( ChooserAction.Builder( Icon.createWithResource(context, R.drawable.ic_custom_action), "Custom", PendingIntent.getBroadcast( context, 1, Intent(Intent.ACTION_VIEW), PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_CANCEL_CURRENT ) ).build() ) shareIntent.putExtra(Intent.EXTRA_CHOOSER_CUSTOM_ACTIONS, customActions) context.startActivity(shareIntent)
Intent sendIntent = new Intent(Intent.ACTION_SEND) .setType("text.plain") .putExtra(Intent.EXTRA_TEXT, text); Intent shareIntent = Intent.createChooser(sendIntent, null); ChooserAction[] actions = new ChooserAction[]{ new ChooserAction.Builder( Icon.createWithResource(context, R.drawable.ic_custom_action), "Custom", PendingIntent.getBroadcast( context, 1, new Intent(Intent.ACTION_VIEW), PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_CANCEL_CURRENT ) ).build() }; shareIntent.putExtra(Intent.EXTRA_CHOOSER_CUSTOM_ACTIONS, actions); context.startActivity(shareIntent);
Utiliser le résolveur d'intent Android

Capture d'écran du résolveur d'intent ACTION_SEND
.
Le résolveur d'intent Android est idéal lorsque vous envoyez des données à une autre application dans le cadre d'un flux de tâches bien défini.
Pour utiliser le résolveur d'intent Android, créez un intent et ajoutez des extras comme vous le feriez pour appeler
Android Sharesheet. Toutefois, n'appelez pas Intent.createChooser()
.
Si plusieurs applications installées dont les filtres correspondent
ACTION_SEND
et le type MIME, le système affiche une boîte de dialogue de sélection d'application appelée résolveur d'intent.
qui permet à l'utilisateur de choisir
une cible de partage. Si une seule application correspond, elle s'exécute.
Voici un exemple d'utilisation du résolveur d'intent Android pour envoyer du texte:
val sendIntent: Intent = Intent().apply { action = Intent.ACTION_SEND putExtra(Intent.EXTRA_TEXT, "This is my text to send.") type = "text/plain" } startActivity(sendIntent)
Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send."); sendIntent.setType("text/plain"); startActivity(sendIntent);
En savoir plus
Pour en savoir plus sur l'envoi de données, consultez la section Intents et filtres d'intents.