我浪费了很多时间,试图通过共享Intent来分享一个简单的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也打开并让我登录,但它告诉我updoad失败了。 我也尝试了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);
我不知道我是否正确地做到了,之前没有这样做过。
我的最后一次尝试是发送一个包含img标签的图像的HTML字符串。但Facebook似乎不会处理类型“text / html”,所以它不是一个选项。 我确信它只需要几行代码。但是哪些?
修改
我忘了这行
shareIntent.putExtra(Intent.EXTRA_STREAM, picUri);
在第一个代码段中。当我尝试时它就在那里,也没有工作。 没睡多久......
答案 0 :(得分:0)
我认为这会回答你的问题。 https://stackoverflow.com/a/3553102/478537
看起来你走在正确的道路上,我所能看到的是,在你的第一个代码片段中,你没有在任何地方使用picUri,因此它没有被发送,而在第二个,你正在设置EXTRA_STREAM两次(这不会导致任何问题,只是冗余代码)。
答案 1 :(得分:0)
..Intent.EXTRA_TEXT, someString
。
这将使您与Facebook的交易失败 - 而不是“someString” - Facebook共享期望并搜索通过EXTRA_TEXT传输的URL。为什么 - 不要问......我不明白这些人
答案 2 :(得分:0)
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)));
}
答案 3 :(得分:0)
您可以创建一个新类并将其保存在一个活动中,而不是通过意图传递图像。并从另一个活动访问该图像。