2010-10-22 7 views
1

Je joins une image PNG à un e-mail avec le code suivant:Envoi attachement PNG via l'application Android GMail

ContentValues values = new ContentValues(); 
values.put(MediaStore.Images.Media.TITLE, title); 
values.put(MediaStore.Images.Media.DESCRIPTION, title); 
values.put(MediaStore.Images.Media.MIME_TYPE, "image/png"); 
Uri uri = activity.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); 
OutputStream stream = activity.getContentResolver().openOutputStream(uri); 
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); 
stream.close(); 

Intent intent = new Intent(Intent.ACTION_SEND); 
intent.setType("image/png"); 
intent.putExtra(Intent.EXTRA_SUBJECT, "Message title"); 
intent.putExtra(Intent.EXTRA_TEXT, "Message body"); 
intent.putExtra(Intent.EXTRA_STREAM, uri); 
activity.startActivity(Intent.createChooser(intent, activity.getString(R.string.share))); 

L'application HTC natif e-mail se débrouille avec ce beau mais l'application GMail insiste en donnant à la pièce jointe une extension ".jpg" même si l'image est définitivement un PNG. Cela peut être juste un bug dans l'application GMail mais je pensais que je demanderais de toute façon.

C'est ce que LogCat montre lorsque la fixation est fixé:

I/Gmail ( 285): >>>>> Attachment uri: content://media/external/images/media/11 
I/Gmail ( 285): >>>>>   type: image/png 
I/Gmail ( 285): >>>>>   name: 1287752711300.jpg 
I/Gmail ( 285): >>>>>   size: 0 

est-il un moyen de contrôler le nom du fichier utilisé par l'application GMail? Je n'ai rien trouvé d'évident dans la documentation de l'intention supplémentaire. Idéalement, je serais en mesure de spécifier le nom complet, mais même l'obtenir juste pour utiliser la bonne extension de fichier serait une victoire.

Répondre

2

Peut-être que l'application GMail suppose que le contenu fourni par l'application de magasin de médias sont toujours des images jpg. Il pourrait même s'agir du magasin de médias qui pourrait fournir de mauvaises données à l'application GMail.

Vous pouvez essayer de stocker votre fichier PNG sur le système de fichiers et comme le GMail ne supporte pas complètement le fichier: Uris (il ne fonctionne qu'avec les fichiers sur le stockage externe), vous pouvez utiliser ContentProvider pour fournir du contenu à partir d'un fichier avec un contenu: // uri à la place. Vous pouvez trouver un tel fournisseur de contenu here.

Un autre test simple pourrait être d'envoyer un fichier PNG à partir du système de fichiers via GMail en utilisant une application d'exploration de fichiers comme EStrongs ou Astro. Si GMail impose toujours l'extension .jpg, vous aurez peut-être du mal à trouver un moyen de contourner ce problème.

idée dernière, essayez d'utiliser un plus générique de type MIME comme application/octet-stream (mais cela pourrait entraîner des problèmes pour dans les récepteurs de courrier des applications de messagerie qui pourraient ne pas comprendre ce type de fichier est)

+0

Vous étiez droite. Une fois que je l'ai converti pour utiliser un ContentProvider, GMail se comporte un peu plus judicieusement. C'est plus de code mais c'est probablement mieux de le faire de cette façon que de déposer des fichiers dans le Media store. –

+0

Ce lien ne fonctionne plus, d'autres exemples? –

+1

@ErikB Le même fichier peut maintenant être trouvé [ici] (http://code.google.com/p/openintents/source/browse/trunk/filemanager/FileManager/src/org/openintents/filemanager/FileManagerProvider.java) . –

Questions connexes