2013-07-10 690 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