Comment les applications Android implémentent-elles le bouton de partage?

11

Je me demandais comment les applications Android et Android implémentent le bouton de partage et le mécanisme de partage. Par exemple, lorsque je clique sur le bouton de partage sur YouTube, une liste des applications à partager s'affiche. Comment cette liste est-elle déterminée? Existe-t-il une intention de «partage» spécifique, puis tous les spots capables de partager le type d'intention fourni dans les extras d'intention s'affichent? Quel est le nom technique du modèle de conception utilisé pour l'implémenter? Merci.

Jack Maddington
la source
1
Vouliez-vous vraiment dire «caca», ou est-ce une faute de frappe pour «pop»? En anglais américain au moins, le premier est ce que les bébés font à leurs couches.
JDługosz
Vous avez raison. Je suis récemment passé au clavier Swype sur Android, ce qui me permet de taper plus rapidement, mais parfois, il entre le mauvais mot et je ne le remarque pas. Je ne sais pas encore quoi faire à ce sujet, je ne suis pas très prudent. Parfois dans le sous-marin et ne peut même pas voir l'écran correctement.
Jack Maddington
Dans le sous-marin (sous-marin?)! Que faire: relire avant de soumettre. Et ne polluez pas votre liste de prédictions avec des mots embarrassants.
JDługosz
Par coïncidence, ma liste de prédictions est remplie de trucs provenant d'anciens courriels, que Swype a lus automatiquement. Oui!
Jack Maddington

Réponses:

10

Il y a deux parties à cela: le mécanisme pour que les applications de communication disent qu'elles peuvent partager des choses, et le mécanisme pour les applications avec du contenu à partager. Je vais les traiter un à la fois, mais d'abord une petite note sur les intentions .

Intentions

L' intention dans Android est ce qui est utilisé pour démarrer une application. Il peut fonctionner comme un raccourci ou comme une association de fichiers Windows. L'intention peut spécifier le nom de l'application à démarrer, mais ce n'est pas obligatoire. Il peut également spécifier l'action à effectuer (par exemple "ouvrir votre activité principale", "afficher cette URL", "créer une entrée d'agenda") et le type MIME de l'objet sur lequel il agira (par exemple, la chose que vous souhaitez afficher a le type image / jpeg). Certains noms d'actions sont spécifiques à une application particulière, mais beaucoup sont normalisés par Android pour permettre aux applications d'interagir.

Filtres d'intention et application de communication

Chaque application spécifie des filtres d'intention pour indiquer le type d'actions qu'elle peut effectuer. par exemple, une application de visualisation d'images enregistrerait un filtre d'intention pour "afficher cette URL" où le type MIME est "image / *"; un navigateur Web enregistrerait un filtre d'intention pour "afficher cette URL" où le schéma d'URL est "http" ou "https". Pour pouvoir partager des choses, une application enregistre un filtre d'intention pour l'intention «envoyer», soit avec un type spécifique (par exemple si elle ne peut partager que des photos), soit pour n'importe quel type.

Application de contenu

L'application qui souhaite partager du contenu crée une intention avec l'action "partager" et une URL pointant vers le contenu à partager. (Il s'agit souvent d'une URL "temporaire" qui donne à l'application réceptrice un accès temporaire au fichier dans le stockage privé de l'application de contenu ou à un flux généré par l'application de contenu.) Elle ne spécifie pas le nom d'une application pour gérer le intention. Ensuite, il donne cette intention au framework Android et demande à Android d'afficher la boîte de dialogue du sélecteur . Android compare l'intention avec les filtres d'intention de toutes les applications installées, crée la liste et la montre à l'utilisateur. Lorsque l'utilisateur choisit une application particulière, Android démarre cette application et lui transmet l'intention. L'application utilise l'URL pour obtenir le contenu de l'application d'origine.

Nouveau dans Marshmallow: Direct Share

Dans Marshmallow, il existe un autre mécanisme appelé Direct Share . Cela complète le mécanisme d'intention afin que vous puissiez choisir des personnes ou des groupes à partager directement à partir de la boîte de dialogue du sélecteur, en sautant l'étape supplémentaire de "à qui aimeriez-vous l'envoyer". Cela fonctionne légèrement différemment: l'application de communication doit fournir un service. Lorsque l'application avec le contenu demande un sélecteur, Android démarre le service pour chaque application pertinente. Le service renvoie une liste de cibles de partage pertinentes et Android assemble toutes ces listes distinctes dans la liste qui s'affiche dans la boîte de dialogue.

Dan Hulme
la source
Mais, j'ai vu des applications afficher plusieurs boîtes de dialogue de sélection différentes . Sont-ils tous vraiment affichés par le système d'exploitation, ou l'application elle-même peut-elle obtenir une liste de cibles?
user1686
@grawity La boîte de dialogue intégrée a quelques options de personnalisation (par exemple pour définir le titre), mais il est également possible pour l'application de demander à Android la liste des cibles de partage et de les placer dans sa propre boîte de dialogue. Le sélecteur de navigateur bURLy en est un exemple, mais avec l'intention "URL ouverte" au lieu de l'intention "envoyer".
Dan Hulme
11

Je ne suis pas un développeur, je peux donc simplement donner une explication brute: les applications déclarent dans Manifestquels Mimetypes elles comprennent et souhaitent répondre à des actions de partage. Pour cela, ils définissent ce que l'on appelle des "filtres d'intention", par exemple:

<intent-filter>
    <action android:name="android.intent.action.SEND" />
    <category android:name="android.intent.category.DEFAULT"/>
    <data android:mimeType="application/*" />
    <data android:mimeType="audio/*" />
    <data android:mimeType="image/*" />
    <data android:mimeType="message/*" />
    <data android:mimeType="multipart/*" />
    <data android:mimeType="text/*" />
    <data android:mimeType="video/*" />
</intent-filter>

Ainsi, chaque fois que vous appuyez sur le bouton "partager", le contenu à partager est évalué et comparé aux applications ayant déclaré leur volonté de recevoir le format.

Sources:

Izzy
la source
1
C'est à peu près tout. L'application (faisant le partage) elle-même peut filtrer certains des répondants intentionnels, mais la plupart ne le font pas.
coteyr
2
@ HiltonShumway c'est pourquoi j'ai voté pour sa réponse. À part moi, Dan est apte au développement et sait beaucoup mieux comment les choses vont ensemble. Alors quand j'ai posté ma réponse, j'espérais qu'il en posterait une aussi - il n'a pas déçu mon espoir :)
Izzy