Android: comment joindre une image générée temporairement à un e-mail?
J'ai généré par programmation de l'image que je veux l'envoyer sous forme de pièce jointe via le ACTION_SEND
et EXTRA_STREAM
méthode.
Mais comment dois-je faire?
Ma première tentative (écrit à mon context.getCacheDir()
en fonction chemin d'accès au fichier) est apparu à travailler dans l'e-mail d'aperçu (pas d'aperçu de l'image, mais le nom du fichier joint et l'icône est visible), mais la pièce jointe n'est jamais arrivé du côté du destinataire. Je suppose que cela a quelque chose à voir avec les autorisations sur le fichier généré, mais comment l'éviter? Ai-je besoin de définir des paramètres plus permissifs sur ces fichiers générés (de sorte que le compte Gmail de l'activité peut avoir accès)? Est-il même possible pour l'application du dossier de cache?
Est-il un autre emplacement du fichier qui serait plus adapté à écrire mes fichiers? J'ai examiné le dossier de téléchargements, mais pense que ce serait une drôle d'endroit pour une chose que seuls les besoins d'exister jusqu'à ce qu'il a été envoyé par courriel.
J'ai même essayé de codage de mon image purement data:image/png;base64,ABCD...
style URI. Cela, aussi, a montré dans Gmail aperçu (icône de pièce jointe, mais pas de nom de fichier), mais n'a pas abouti à un destinataire côté de la pièce jointe.
Quelqu'un a été en mesure de fixer un one-shot image générée à un e-mail intention par n'importe quel moyen? Quelles sont les options de mai j'ai négligé?
source d'informationauteur el2iot2 | 2010-08-25
Vous devez vous connecter pour publier un commentaire.
Mon problème vraiment se composait de deux parties:
context.getCacheDir()
est privé de votre application. Vous ne pouvez pas mettre quelque chose là-bas et attendre une autre application pour pouvoir y accéder.image/png
pour l'amour de mon attachement.En outre, la recherche a indiqué que la mise (potentiellement importantes) des images sur la mémoire principale n'était pas une bonne idée, même si vous alliez immédiatement nettoyer.
Une fois que j'ai fait ces choses et écrit mes images générées à un public localisation sur la Carte SD, il a très bien fonctionné.
Donc, dans la vue d'ensemble:
Demande d'Accès à la Carte SD dans votre manifeste
Assurez-vous que la Carte SD est disponible
Créer un répertoire sur la Carte SD
Écrire votre fichier de ce répertoire et de capturer l'Uri
Construire un
ACTION_SEND
intentionPuis de commencer l'activité
Puis assurez-vous de nettoyer tout...
Mise en garde 1
Il semble y avoir plus de soutien venant spécifiques à l'application de la Carte SD de répertoires, mais hélas, pas dans mon requise version du SDK.
Mise en garde 2
C'est un aperçu de la solution qui a finalement fonctionné pour moi. Il n'est pas nécessairement une "meilleure pratique".
Mise en garde 3
Cela signifie que la demande a avoir une Carte SD monté afin d'avoir les images en pièces jointes fonction est disponible, mais c'était tout à fait acceptable pour mon cas d'utilisation. Votre kilométrage peut varier. Si la Carte SD n'est pas disponible, j'ai ajouter une remarque amicale à l'e-mail d'expliquer pourquoi les images pourraient ne pas être attaché et comment faire pour remédier à la situation.
Je viens de lancer dans exactement le même problème (vouloir joindre un fichier texte dans mon cas). Si vous regardez dans l'Android journal, la raison pour cela est:
Comme une solution de contournement (comme mentionné par HRJ), vous pouvez utiliser un ContentProvider pour fournir l'accès à vos fichiers dans l'application interne du cache de sorte que Gmail peut les joindre. Je viens d'écrire un post de blog sur la façon de le faire.
J'espère que c'est de peu d'aide 🙂