我正在实施ContentProvider
,以便将数据发送到其他应用,而无需将其写入外部存储。 (见How to implement a ContentProvider for providing image to Gmail, Facebook, Evernote, etc)。无论如何,Facebook看起来并不好看(或者我不知道如何回答好看)。它在我的ContentProvider
上执行查询,并在其查询的列列表中包含“_data”(MediaStore.MediaColumns.DATA
),但之后它永远不会调用openFile
。如何从ContentProvider
获取数据?是不正确的只是尝试直接打开_data列中返回的文件而不是访问ContentProvider
?有没有什么可以为Facebook提供图像而无需将其写入外部存储?
答案 0 :(得分:0)
我的“解决方案”是让文件可读file.setReadable(true, false);
不需要Android外部存储权限。
FB从不要求文件openFile(Uri uri, String mode)
并直接加入文件。
可能在提供程序中有一些标志或xml参数,但我测试了我能找到的所有内容并且没有FB的运气。每个其他共享应用程序都运行良好。
答案 1 :(得分:0)
我不知道这是否解决了您的具体问题,但我遇到了类似的问题:
通过ContentProvider,我通过在openFile()
中返回以下内容来提供对它的访问权限:
return ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
分享到Facebook时,图片不会显示。但是,每个其他应用都可以工作。调试调用我的ContentProvider,我看到Facebook确实查询了ContentProvider,openFile()
被点击了。然而,图像不会出现。
经过多次努力,我意识到我将null
作为MIME类型返回。我更改了getType()
的结果以返回“image / png”,就是这样:Facebook接受了我的图像。