11 votes

Comment les applications Android mettent-elles en œuvre le bouton de partage ?

Je me demandais comment les applications Android et Android mettent en œuvre le bouton de partage et le mécanisme de partage. Par exemple, lorsque j'appuie sur le bouton de partage sur YouTube, une liste d'applications à partager s'affiche. Comment cette liste est-elle déterminée ? Y a-t-il une intention spécifique de "partage", puis toutes les applications capables de partager le type d'intention fourni dans les extras de l'intention apparaissent ? Quel est le nom technique du modèle de conception utilisé pour mettre cela en œuvre ? Merci.

1 votes

Vouliez-vous vraiment dire "poops", ou est-ce une faute de frappe pour "pops" ? En anglais américain du moins, le premier terme désigne ce que les bébés font à leurs couches.

0 votes

Vous avez raison. J'ai récemment adopté le clavier Swype sur Android, qui me permet de taper plus vite, mais il arrive qu'il entre le mauvais mot et que je ne le remarque pas. Je ne sais pas encore ce qu'il faut faire, je ne suis pas quelqu'un de très prudent. Parfois, dans le sous-marin, je ne peux même pas voir l'écran correctement.

0 votes

Dans le sous-marin (submarine ?)! Ce qu'il faut faire : relire avant d'envoyer. Et ne polluez pas votre liste de prédictions avec des mots embarrassants.

11voto

Milner Points 533

Je ne suis pas un développeur, donc je peux juste donner une explication brute : les applications déclarent dans leur Manifest les Mimetypes qu'ils comprennent et qui sont prêts à répondre aux actions de partage. Pour cela, ils définissent ce qu'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, lorsque vous appuyez sur le bouton "Partager", le contenu à partager est évalué et comparé aux applications qui ont déclaré vouloir recevoir le format.

Sources :

1 votes

C'est à peu près tout ce qu'il y a à faire directement. L'application (qui effectue le partage) elle-même peut filtrer certains des répondants intentionnels, mais la plupart ne le font pas.

2 votes

@HiltonShumway c'est pourquoi j'ai voté pour sa réponse. A part moi, Dan est en phase avec le développement et sait mieux que moi comment les choses s'assemblent. Donc quand j'ai posté ma réponse, j'espérais qu'il en posterait une aussi - il n'a pas déçu mon espoir :)

10voto

Andy Brudtkuhl Points 1714

Il y a deux parties à cela : le mécanisme permettant aux applications de communication de dire qu'elles peuvent partager des choses, et le mécanisme permettant aux applications ayant un contenu à partager. Je les aborderai l'un après l'autre, mais tout d'abord, une brève remarque sur les points suivants intents .

Intentions

El 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 à lancer, mais ce n'est pas obligatoire. Elle peut également préciser l'action à effectuer (par exemple, "ouvrir votre activité principale", "afficher cette URL", "créer une entrée de calendrier") et le type MIME de l'objet sur lequel elle va agir (par exemple, que l'objet que vous voulez afficher est de 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 filtres d'intention pour indiquer le type d'actions qu'elle peut exécuter. Par exemple, une application de visualisation d'images enregistrera un filtre d'intention pour "afficher cette URL" lorsque le type MIME est "image/*" ; un navigateur web enregistrera un filtre d'intention pour "afficher cette URL" lorsque le schéma d'URL est "http" ou "https". Pour pouvoir partager des objets, 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 un 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 destinataire 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). Il ne spécifie pas le nom d'une application pour traiter l'intention. Ensuite, il transmet cette intention au framework Android et demande à Android d'afficher l'élément suivant sélectionneur dialogue. Android compare l'intention avec les filtres d'intention de toutes les applications installées, puis crée la liste et la montre à l'utilisateur. Lorsque l'utilisateur choisit une application particulière, Android lance cette application et lui transmet l'intention. L'application utilise l'URL pour obtenir le contenu de l'application originale.

Nouveau dans Marshmallow : Partage direct

Dans Marshmallow, il y a un autre mécanisme appelé Partage direct . Il complète le mécanisme d'intention de façon à ce que vous puissiez choisir les personnes ou les groupes à qui partager directement à partir de la boîte de dialogue du sélecteur, en sautant l'étape supplémentaire du "à qui voulez-vous l'envoyer". Le fonctionnement est légèrement différent : l'application de communication doit fournir un service. Lorsque l'application contenant le contenu demande un sélecteur, Android lance le service pour chaque application concernée. Le service renvoie une liste de objectifs pertinents en matière d'actions et Android rassemble toutes ces listes distinctes dans la liste qui s'affiche dans la boîte de dialogue.

0 votes

Mais j'ai vu des applications en montrer un certain nombre différents dialogues de sélection. Sont-elles toutes réellement affichées par le système d'exploitation, ou l'application elle-même peut-elle obtenir une liste de cibles ?

0 votes

@grawity La boîte de dialogue intégrée dispose de 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. Mon sélecteur de navigateur bURLy en est un exemple, mais avec l'intention "ouvrir l'URL" au lieu de l'intention "envoyer".

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X