Comment pouvez-vous filtrer des applications spécifiques lorsque vous utilisez l'intention ACTION_SEND? Cette question a été posée de différentes manières, mais je n'ai pas été en mesure de trouver une solution basée sur les réponses données. J'espère que quelqu'un pourra vous aider. Je souhaite offrir la possibilité de partager dans une application. Suivant les conseils d'Android Dev Alexander Lucas , je préfère le faire en utilisant des intentions et non en utilisant les API Facebook / Twitter.
Le partage à l'aide de l'intention ACTION_SEND est excellent, mais le problème est (1) Je ne veux pas toutes les options de partage là-bas, je préfère le limiter à FB, Twitter et E-mail, et (2) Je ne veux pas partager la même chose pour chaque application de partage . Par exemple, dans mon partage Twitter, je vais inclure des mentions et des hashtags limités à 140 caractères ou moins, tandis que le partage Facebook va inclure un lien et une image de fonction.
Est-il possible de limiter les options pour l'intention ACTION_SEND (partage)? J'ai vu quelque chose à propos de l'utilisation de PackageManager et de queryIntentActivities, mais je n'ai pas été en mesure de comprendre la connexion entre PackageManager et l'intention ACTION_SEND.
OU
Plutôt que de filtrer les applications de partage, mon problème pourrait également être résolu si je pouvais utiliser l'intention ACTION_SEND pour accéder directement à Facebook ou Twitter plutôt que d'afficher la boîte de dialogue. Si tel était le cas, je pourrais créer ma propre boîte de dialogue et quand ils cliquent sur "Facebook", créer une intention spécifique à Facebook et les envoyer simplement à Facebook. Même chose avec Twitter.
OU n'est-ce pas possible? Les API Facebook et Twitter sont-elles le seul moyen?
la source
Réponses:
À ma connaissance, StackOverflow a beaucoup de gens qui posent cette question de différentes manières, mais personne n'y a encore répondu complètement.
Ma spécification demandait à l'utilisateur de pouvoir choisir l'email, Twitter, Facebook ou SMS, avec un texte personnalisé pour chacun. Voici comment j'ai accompli cela:
J'ai trouvé des bouts de comment faire ceci dans divers endroits, mais je n'ai pas vu tout cela dans un endroit nulle part ailleurs.
Notez que cette méthode masque également toutes les options idiotes que je ne veux pas, comme le partage via wifi et bluetooth.
J'espère que cela aide quelqu'un.
Edit: Dans un commentaire, on m'a demandé d'expliquer ce que fait ce code. Fondamentalement, il crée
ACTION_SEND
UNIQUEMENT une intention pour le client de messagerie natif, puis ajoute d'autres intentions au sélecteur. Rendre l'intention d'origine spécifique à l'e-mail élimine tous les indésirables supplémentaires tels que le wifi et le bluetooth, puis je saisis les autres intentions que je veux d'un génériqueACTION_SEND
de type texte brut et les cloue avant d'afficher le sélecteur.Lorsque je saisis les intentions supplémentaires, je définis un texte personnalisé pour chacune.
Edit2: Cela fait un moment que j'ai posté ceci, et les choses ont un peu changé. Si vous voyez gmail deux fois dans la liste des options, essayez de supprimer la gestion spéciale pour "android.gm" comme suggéré dans un commentaire de @h_k ci-dessous.
Étant donné que cette seule réponse est la source de presque tous mes points de réputation de stackoverflow, je dois au moins essayer de la maintenir à jour.
la source
Si vous souhaitez une option personnalisée, vous ne devez pas vous fier à la boîte de dialogue par défaut fournie par Android pour cette action.
Ce que vous devez faire à la place, c'est déployer le vôtre. Vous devrez interroger le PackageManager sur les packages qui gèrent l'action dont vous avez besoin, puis en fonction de la réponse, vous appliquez le filtrage et le texte personnalisé.
Plus précisément, jetez un oeil à la méthode queryIntentActivities de la PackageManager classe. Vous créez l'intention qui lancerait la boîte de dialogue par défaut (l'intention ACTION_SEND), transmettez-la à cette méthode et vous recevrez une liste d'objets contenant des informations sur les activités pouvant gérer cette intention. En utilisant cela, vous pouvez choisir ceux que vous voulez.
Une fois que vous avez créé votre liste de packages que vous souhaitez présenter, vous devez créer votre propre boîte de dialogue de liste (de préférence une activité avec le thème de la boîte de dialogue) qui affichera cette liste.
Une chose à noter cependant est qu'il est très difficile de faire en sorte que cette boîte de dialogue personnalisée ressemble à celle par défaut. Le problème est que le thème utilisé dans cette boîte de dialogue est un thème interne et ne peut pas être utilisé par votre application. Vous pouvez soit essayer de le rendre aussi similaire à celui natif que vous le souhaitez ou opter pour un look complètement personnalisé (de nombreuses applications le font comme l'application de galerie, etc.)
la source
Essayez celui-ci pour ne partager que trois applications: Facebook, Twitter, KakaoStory.
la source
J'ai trouvé une solution qui fonctionne pour moi en regardant ici (voir le troisième commentaire sur la première réponse). Ce code recherche un client Twitter valide et l'utilise pour publier le tweet. Remarque: il ne vous donne pas d'intention avec les différents clients Twitter et vous permet de choisir.
Partagez sur Twitter:
Appel de cette méthode:
Facebook sera similaire en utilisant " com.facebook.katana ", bien que vous ne puissiez toujours pas définir le texte du message (obsolète en juillet 2011).
Source du code: intention d'ouvrir le client Twitter sur Android
la source
Merci à @dacoinminster. J'apporte quelques modifications à sa réponse, y compris les noms de package des applications populaires et le tri de ces applications.
la source
Vous pouvez essayer le code ci-dessous, cela fonctionne parfaitement.
Ici, nous partageons certaines applications spécifiques, à savoir Facebook, Messenger, Twitter, Google Plus et Gmail.
la source
Cette solution affiche une liste d'applications dans une boîte de dialogue ListView qui ressemble au sélecteur:
C'est à vous de:
La classe d'adaptateur:
et son utilisation:
la source
Le moyen le plus simple consiste à copier les classes suivantes: ShareActionProvider, ActivityChooserView, ActivityChooserModel. Ajoutez la possibilité de filtrer les intentions dans ActivityChooserModel et les méthodes de support appropriées dans ShareActionProvider. J'ai créé les classes nécessaires, vous pouvez les copier dans votre projet ( https://gist.github.com/saulpower/10557956 ). Cela ajoute non seulement la possibilité de filtrer les applications avec lesquelles vous souhaitez partager (si vous connaissez le nom du package), mais également de désactiver l'historique.
la source
J'ai amélioré la réponse @dacoinminster et voici le résultat avec un exemple pour partager votre application:
la source
J'ai eu le même problème et cette solution acceptée ne m'a pas aidé, si quelqu'un a le même problème, vous pouvez utiliser mon extrait de code:
la source
la source
Si simple et concis. Merci au développeur Open source, cketti pour le partage de cette solution:
Et c'est le lien vers son / son essentiel.
la source