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.
share-menu
intents
Jack Maddington
la source
la source
Réponses:
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.
la source
Je ne suis pas un développeur, je peux donc simplement donner une explication brute: les applications déclarent dans
Manifest
quels 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: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:
la source