2013-07-10 279 views
0

我有類似如下的代碼從資產文件夾加載時:圖像預覽未顯示

public void shareImageInEmail(String imageUri){ 
    Intent emailIntent = new Intent(Intent.ACTION_SEND); 
    emailIntent.setType("message/rfc822"); 
    emailIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    emailIntent.putExtra(Intent.EXTRA_TEXT, "Some text"); 
    emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(imageUri)); 
    mActivity.startActivity(emailIntent); 
} 

Uri從媒體文件夾搶下(相機相冊等)一切工作正常。 問題是,當我把從資產Uri文件夾是這樣的:

share("content://com.ex.myapp/logo.png"); 

在這種情況下,共享的作品,但電子郵件客戶端被打開時,圖像預覽是一個灰色的框,而不是實際的圖像。當我發送圖片被正確發送時,它只是沒有顯示預覽。

任何人都有解決方案嗎?

+0

集類型像這樣*/*而不是郵件/ rfc822 – Nas

+0

他們的畝st斜槓前後爲星號(*)符號。這個評論框不支持或者我不知道如何把這個 – Nas

+0

嗨Deen。感謝您的回答,但是這並沒有解決問題。 – adrianrdzv

回答

1

一個簡單的解決方案是將資產中的所有內容複製到Sdcard並將'Sdcard路徑Uri'作爲EXTRA_STREAM傳遞給電子郵件。

示例代碼:

public void shareImageInEmail(String imageUri){ 
     Intent emailIntent = new Intent(Intent.ACTION_SEND);   
     emailIntent.setType("message/rfc822"); 

     emailIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     emailIntent.putExtra(Intent.EXTRA_TEXT, "Some text"); 

     Log.v(TAG, "imageUri, file://" + imageUri); 
     emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + imageUri)); 
     startActivity(emailIntent); 
} 

複製所有資產,以SD卡(參見:How to copy files from 'assets' folder to sdcard?

new File(Environment.getExternalStorageDirectory(), filename); //Store in Sdcard 

最後調用shareImageInEmail如下,

shareImageInEmail(Environment.getExternalStorageDirectory() + "/Image.png");//assets[0]); 
+0

感謝您的回覆,我標記爲已解決,因爲我使用了您的方法。基本上是因爲其他軟件包無法直接訪問我的軟件包資產。我使用AssetManager.open(uri.getPath()。substring(1))創建一個文件,然後將此文件作爲EXTRA_STREAM添加到意圖中。這解決了我的應用程序的問題。 – adrianrdzv