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

在这种情况下,共享工作,但当打开电子邮件客户端时,图像预览是一个灰色框,而不是实际图像。当我发送图片时发送正确,它只是不显示预览。

有人对此有解决方案吗?

4

1 回答 1

1

一个简单的解决方案是将 Assets 中的所有内容复制到 Sdcard 并将“Sdcard path 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);
}

将所有资产复制到 SDCard(参考:如何将文件从“资产”文件夹复制到 sdcard?

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

最后调用shareImageInEmail如下,

shareImageInEmail(Environment.getExternalStorageDirectory() + "/Image.png");//assets[0]);
于 2013-07-10T12:16:44.053 回答