在我的应用中,我可以选择使用标准的Android共享机制来分享照片。当我选择gmail或yahoo邮件时,共享工作,图像显示在电子邮件正文中并发送到目的地。当我选择Facebook时,图像显示在Facebook活动中,您可以在其中添加消息,但是当我点击完成按钮时,上传过程开始,但总是失败。
消息框的标题是:" Facebook上传失败"消息本身是:"由于我们无法访问您的照片,您的上传无法完成。"
以下是分享的代码段:
mShareIntent = new Intent();
mShareIntent.setAction(Intent.ACTION_SEND_MULTIPLE);
mShareIntent.setType("image/jpeg");
mShareIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
ArrayList<Uri> uris = new ArrayList<Uri>();
for(int i = 0; i < mImageUrls.size(); i++) {
uris.add(Uri.parse("file://"+mShareFiles[i].getAbsolutePath()));
}
mShareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
startActivity(Intent.createChooser(mShareIntent, "Share Images To..."))
这些照片显然是可以访问的,因为它们是通过gmail和yahoo邮件成功处理的。 Facebook本身可以访问它们,但不能发送它们。
作为一项实验,我分享了Android画廊中的照片,在Chooser中,我选择了Facebook,并且照片已成功上传。
有没有人知道可能会发生什么?
谢谢你, 加里
答案 0 :(得分:1)
如果文件位于应用程序的私人目录中(甚至在KitKat的sd卡目录中),那么您可能会遇到共享问题。 FileProvider
也存在问题。
我发现共享图像文件的唯一可靠方法是将它们复制到外部存储目录以获取图片并从那里共享(您可以创建一个.nomedia
子目录以避免它们出现在Gallery应用程序中) 。
例如:
Bitmap bitmapToShare = ...
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
File pictureStorage = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File noMedia = new File(pictureStorage, ".nomedia");
if (!noMedia.exists())
noMedia.mkdirs();
File file = new File(noMedia, "shared_image.png");
saveBitmapAsFile(bitmapToShare, file);
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
shareIntent.setType("image/png");
startActivity(shareIntent);
}