如何在android中的gmail中从服务器共享/附加图像

时间:2013-06-22 20:00:16

标签: android

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

请帮我分享服务器上的图片。

2 个答案:

答案 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"/>

这对我来说很完美