2010-10-22 24 views
1

我附加了一個PNG圖像的電子郵件與下面的代碼:通過Android版Gmail應用發送PNG附件

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))); 

本機HTC電子郵件應用程序與此罰款科佩斯但Gmail應用程序堅持即使圖片絕對是PNG,也會給附件一個「.jpg」擴展名。這可能只是GMail應用程序中的一個錯誤,但我想我會問。

這是logcat的節目時,連接附件:

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 

是否有某種方式來控制Gmail應用程序使用的文件名?我在Intent extras文檔中找不到任何明顯的內容。理想情況下,我可以指定全名,但即使只是使用正確的文件擴展名也是一個勝利。

回答

2

也許GMail應用程序假定媒體商店應用程序提供的內容始終爲jpg圖片。它甚至可能是可以向GMail應用程序提供錯誤數據的媒體商店。

您可以嘗試將PNG文件存儲在文件系統中,並且由於GMail不完全支持file:// Uris(它僅適用於外部存儲上的文件),您可以使用自定義ContentProvider來簡單地提供內容從具有content:// uri的文件替代。您可以找到這樣的內容提供商here

另一個簡單的測試可能是使用文件瀏覽器應用程序(如EStrongs或Astro)通過GMail從文件系統發送PNG文件。如果GMail仍然強制使用.jpg擴展名,那麼您可能很難找到解決這個問題的方法。

最後的想法,嘗試使用更爲通用的MIME類型類似的應用程序/八位字節流(但是這可能會導致問題的郵件接收器可能不明白這是什麼樣的文件的郵件應用程序)

+0

你是對。一旦我將它轉換爲使用ContentProvider,GMail表現得更加明智一些。這是更多的代碼,但最好這樣做比放置Media商店中的文件更好。 – 2010-10-22 22:26:31

+0

該鏈接不再有效,還有其他例子嗎? – 2012-02-09 00:41:49

+1

@ErikB現在可以找到同一個文件[here](http://code.google.com/p/openintents/source/browse/trunk/filemanager/FileManager/src/org/openintents/filemanager/FileManagerProvider.java) 。 – 2012-06-21 11:46:28