我正在实现一个ContentProvider
以便将数据发送到其他应用程序而不将它们写入外部存储。(请参阅如何实现 ContentProvider 以向 Gmail、Facebook、Evernote 等提供图像)。然而,Facebook 的表现似乎并不好(或者我不知道如何回答好)。它在 my 上执行查询ContentProvider
,并在其查询的列列表中包含“_data”( MediaStore.MediaColumns.DATA
),但它从不调用openFile
. 期望如何从 my 获取数据ContentProvider
?只是尝试直接打开 _data 列中返回的文件而不是访问 _data 列是否不正确ContentProvider
?我有什么办法可以在不将图像写入外部存储的情况下向 Facebook 提供图像?
2 回答
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
我不知道这是否解决了您的具体问题,但我遇到了类似的问题:
- 我为我的应用程序私有目录中的图像提供了一个 Uri。
通过 ContentProvider,我通过返回以下内容来提供对它的访问
openFile()
:return ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
分享到 Facebook 时,图像不会出现。但是,其他所有应用程序都可以正常工作。调试对我的 ContentProvider 的调用,我看到 Facebook 确实查询了 ContentProvider,并且
openFile()
被命中了。然而,图像并没有出现。
经过多次挠头,我意识到我null
以 MIME 类型返回。我将结果更改getType()
为返回“image/png”,就是这样:Facebook 接受了我的图片。