4

我有一个图片库,其中图片来自服务器。我想在 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); 

当我尝试使用以下代码传递我的服务器图像 url 时,在发送电子邮件时我收到消息说“无法附加图像”。

Uri.parse(" http://lh6.googleusercontent.com/-jZgveEqb6pg/T3R4kXScycI/AAAAAAAAAE0/xQ7CvpfXDzc/s1024/sample_image_01.jpg ")

请帮我分享来自服务器的图像。

4

2 回答 2

1

似乎 STREAM 和 EXTRA_STREAM 意图类型并没有很好地定义,最终取决于目标应用程序如何解释它们。如果您想确保图像作为二进制文件包含在电子邮件中,更安全的方法是从服务器下载图像并将其附加到您自己的意图中。这里有更多关于这个主题的信息:“android.intent.extra.STREAM”

于 2013-06-28T11:44:45.100 回答
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"/>

它对我来说很完美

于 2015-02-18T09:48:29.927 回答