2

我正在实现一个ContentProvider以便将数据发送到其他应用程序而不将它们写入外部存储。(请参阅如何实现 ContentProvider 以向 Gmail、Facebook、Evernote 等提供图像)。然而,Facebook 的表现似乎并不好(或者我不知道如何回答好)。它在 my 上执行查询ContentProvider,并在其查询的列列表中包含“_data”( MediaStore.MediaColumns.DATA),但它从不调用openFile. 期望如何从 my 获取数据ContentProvider?只是尝试直接打开 _data 列中返回的文件而不是访问 _data 列是否不正确ContentProvider?我有什么办法可以在不将图像写入外部存储的情况下向 Facebook 提供图像?

4

2 回答 2

0

My "solution" was to make files readable file.setReadable(true, false); No need for android external storage permissions.

FB never asks for a file with openFile(Uri uri, String mode) and acceses files directly.

Probably there is some flag or xml param in provider, but i tested everything i could find and had no luck with FB. Every other share app worked fine.

Here is GitHub Demo

于 2015-04-02T01:24:09.963 回答
0

我不知道这是否解决了您的具体问题,但我遇到了类似的问题:

  1. 我为我的应用程序私有目录中的图像提供了一个 Uri。
  2. 通过 ContentProvider,我通过返回以下内容来提供对它的访问openFile()

    return ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
    
  3. 分享到 Facebook 时,图像不会出现。但是,其他所有应用程序都可以正常工作。调试对我的 ContentProvider 的调用,我看到 Facebook 确实查询了 ContentProvider,并且openFile()被命中了。然而,图像并没有出现。

经过多次挠头,我意识到我null以 MIME 类型返回。我将结果更改getType()为返回“image/png”,就是这样:Facebook 接受了我的图片。

另请参阅我的问题和答案。

于 2016-07-23T23:54:29.620 回答