将应用程序私有存储中的图像分享到 Facebook
Sharing image from app private storage to Facebook
我正在尝试采用一种非常通用的方法来提供共享选项,以便从我的应用程序的私有存储中共享图像,但我遇到了一个似乎特定于将图像共享到 Facebook 应用程序的问题 (com.facebook.katana):
- 我启动了一个 EXTRA_STREAM 意图,其中包含我应用程序私有目录中图像的 Uri。
通过 ContentProvider,我通过在 openFile()
中返回以下内容来提供对所需文件的访问:
return ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
分享到 Facebook 时,图片不显示。但是,所有其他应用程序都可以使用。调试调用我的 ContentProvider,我看到 Facebook 确实查询了 ContentProvider,并且 openFile()
被命中。然而,图像并没有出现。
经过多次挠头,我意识到我正在 returning null
作为 MIME 类型。我将 getType()
的结果更改为 return "image/png",就是这样:Facebook 接受了我的图片:
@Nullable
@Override
public String getType(@NonNull Uri uri) {
// It's absolutely imperative that we provide the MIME type, otherwise some apps like
// Facebook will simply ignore the file
return "image/png";
}
我要指出的是,您应该return与 Uri 关联的文件的实际 MIME 类型;我在这里 returning PNG 是因为我很懒,而且我知道我所有的图像都是那种类型的。
我正在尝试采用一种非常通用的方法来提供共享选项,以便从我的应用程序的私有存储中共享图像,但我遇到了一个似乎特定于将图像共享到 Facebook 应用程序的问题 (com.facebook.katana):
- 我启动了一个 EXTRA_STREAM 意图,其中包含我应用程序私有目录中图像的 Uri。
通过 ContentProvider,我通过在
openFile()
中返回以下内容来提供对所需文件的访问:return ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
分享到 Facebook 时,图片不显示。但是,所有其他应用程序都可以使用。调试调用我的 ContentProvider,我看到 Facebook 确实查询了 ContentProvider,并且
openFile()
被命中。然而,图像并没有出现。
经过多次挠头,我意识到我正在 returning null
作为 MIME 类型。我将 getType()
的结果更改为 return "image/png",就是这样:Facebook 接受了我的图片:
@Nullable
@Override
public String getType(@NonNull Uri uri) {
// It's absolutely imperative that we provide the MIME type, otherwise some apps like
// Facebook will simply ignore the file
return "image/png";
}
我要指出的是,您应该return与 Uri 关联的文件的实际 MIME 类型;我在这里 returning PNG 是因为我很懒,而且我知道我所有的图像都是那种类型的。