通过Intent分享图片(Facebook等)

9

我花了很多时间,试图通过共享意图来分享一个简单的jpeg图像。

像往常一样,最重要的是Facebook,但也像往常一样不起作用。

Intent shareIntent = new Intent(Intent.ACTION_SEND);
Uri picUri = Uri.parse("http://someserver.com/somepic.jpg");
shareIntent.setType("image/jpeg");
shareIntent.putExtra(Intent.EXTRA_STREAM, picUri);
shareIntent.putExtra(Intent.EXTRA_TEXT, someString);
startActivity(Intent.createChooser(shareIntent, "some text..."));

选择器打开得很好,Facebook也打开并让我登录,但是然后它告诉我上传失败了。我还尝试了Flicker和Mail,它们都失败了。然后我尝试将图像写入本地文件并从那里发送,但也失败了。
    Drawable dr = ImageLoader.getDrawable(url);
    Bitmap bmp = ((BitmapDrawable)dr).getBitmap();
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bmp.compress(Bitmap.CompressFormat.JPEG, 80, stream);
    byte[] data = stream.toByteArray();

    FileOutputStream ostream;
    try {
        ostream = this.openFileOutput("pic.jpeg", Context.MODE_WORLD_READABLE);
        ostream.write(data);
    } catch (Exception e) {
        e.printStackTrace();
    }

    Uri picUri = Uri.fromFile(new File("pic.jpeg"));
    shareIntent.putExtra(Intent.EXTRA_STREAM, picUri);

我不确定我是否正确地做了这件事,以前从未尝试过。

我最后的尝试是只发送包含图像的HTML字符串,将其作为img标签。但是Facebook似乎无法处理“text / html”类型,因此这不是一个选项。 我相信它只需要几行代码。但是哪几行呢?

编辑

我忘记了这一行。

shareIntent.putExtra(Intent.EXTRA_STREAM, picUri);

在第一个代码片段中。我尝试时它在那里,也没有起作用。 睡眠时间太久了...


5
你曾经找到过一种合理的方式通过URL分享图片吗? - cimnine
嗨,didi_X8,你找到解决这个问题的方法了吗? 因为我也卡在这里了。 - Elshaer
4个回答

0

好的,我花了很多时间,问题出在文件扩展名上(png会有问题,所以在这种情况下忽略文件扩展名并使用“jpg”),请尝试以下代码

public static void shareImageFileWithIntent(File imageFile, Context context) {
    MimeTypeMap mime = MimeTypeMap.getSingleton();
    String type = mime.getMimeTypeFromExtension("jpg");
    Intent sharingIntent = new Intent(Intent.ACTION_SEND);
    sharingIntent.setType(type);
    sharingIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(imageFile));
    sharingIntent.putExtra(Intent.EXTRA_TEXT, "your extra text");
    sharingIntent.putExtra(Intent.EXTRA_SUBJECT, "your subject");
    context.startActivity(Intent.createChooser(sharingIntent, context.getString(R.string.share_image_intent)));
}

0

..Intent.EXTRA_TEXT,someString

这将导致您在Facebook上的交易失败- 不是"someString"- Facebook共享期望并搜索通过EXTRA_TEXT传输的URL。为什么-不要问我..我不理解那些人


0

不必通过意图传递图像,您可以创建一个新类并将其保存在其中一个活动中。然后从另一个活动访问该图像。


它更像是一条评论而不是一个答案。 - Prafulla Kumar Sahu

0

我认为这会回答你的问题。https://dev59.com/y3A65IYBdhLWcg3w7Taa#3553102

看起来你走在了正确的道路上,我只能看到在你的第一个代码片段中,你没有使用picUri,因此它没有被发送,在第二个代码片段中,你设置了EXTRA_STREAM两次(这不会导致任何问题,只是多余的代码)。


抱歉,太久远了...谢天谢地我现在不需要处理FB的东西,因此我不会检查这是否有效。也许有一天我会再次需要它。无论如何还是谢谢。 - didi_X8

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接