将应用程序私有存储中的图像分享到 Facebook

Sharing image from app private storage to Facebook

我正在尝试采用一种非常通用的方法来提供共享选项,以便从我的应用程序的私有存储中共享图像,但我遇到了一个似乎特定于将图像共享到 Facebook 应用程序的问题 (com.facebook.katana):

  1. 我启动了一个 EXTRA_STREAM 意图,其中包含我应用程序私有目录中图像的 Uri。
  2. 通过 ContentProvider,我通过在 openFile() 中返回以下内容来提供对所需文件的访问:

    return ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
    
  3. 分享到 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 是因为我很懒,而且我知道我所有的图像都是那种类型的。