我有一个图像库,图像来自服务器。我想在Gmail中共享/附加图像。我正在使用“添加轻松共享操作”。 http://developer.android.com/training/sharing/shareaction.html#set-share-intent
最初我试图从我的SDCard分享图像,我可以使用下面的代码来完成。
Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
sharingIntent.setType("image/jpeg");
String shareBody = "Here is the share content body";
sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Subject");
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
sharingIntent.putExtra(android.content.Intent.EXTRA_STREAM, Uri.parse("file:///sdcard/DCIM/Camera/20130503_133024.jpg"));
mShareActionProvider.setShareIntent(sharingIntent);
当我尝试通过使用以下代码传递我的服务器图像网址时,然后在发送电子邮件时,我收到消息说“无法附加图像”。
Uri.parse( “http://lh6.googleusercontent.com/-jZgveEqb6pg/T3R4kXScycI/AAAAAAAAAE0/xQ7CvpfXDzc/s1024/sample_image_01.jpg”)
请帮我分享服务器上的图片。
答案 0 :(得分:1)
似乎STREAM和EXTRA_STREAM意图类型的定义并不是很好,最终取决于目标应用程序如何解释它们。 如果您想要将图像保证为电子邮件中的二进制文件,则更安全的方法是从服务器下载图像并将其附加到意图本身。 这里有关于该主题的更多信息:"android.intent.extra.STREAM"
答案 1 :(得分:0)
花了很多时间后,我终于找到了解决方案:
URL url = null;
try {
url = new URL(imageurl);
} catch (MalformedURLException e) {
e.printStackTrace();
}
HttpURLConnection connection = null;
InputStream input = null;
try {
connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
input = connection.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
Bitmap immutableBpm = BitmapFactory.decodeStream(input);
Bitmap mutableBitmap = immutableBpm.copy(Bitmap.Config.ARGB_8888, true);
View view = new View(this);
view.draw(new Canvas(mutableBitmap));
String path = Images.Media.insertImage(getContentResolver(), mutableBitmap, "rbt", null);
Uri uri = Uri.parse(path);
Intent intent = new Intent();
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"test.android@gmail.com"});
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
intent.putExtra(Intent.EXTRA_TEXT, body);
intent.setPackage("com.google.android.gm");
startActivity(intent);
并在 manifest.xml
中添加以下权限 <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
这对我来说很完美