如何通过ContentProvider向Facebook提供图像?

时间:2013-04-08 11:14:49

标签: java android android-intent android-contentprovider

我正在实施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提供图像而无需将其写入外部存储?

2 个答案:

答案 0 :(得分:0)

我的“解决方案”是让文件可读file.setReadable(true, false);不需要Android外部存储权限。

FB从不要求文件openFile(Uri uri, String mode)并直接加入文件。

可能在提供程序中有一些标志或xml参数,但我测试了我能找到的所有内容并且没有FB的运气。每个其他共享应用程序都运行良好。

这是GitHub Demo

答案 1 :(得分:0)

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

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

    return ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
    
  3. 分享到Facebook时,图片不会显示。但是,每个其他应用都可以工作。调试调用我的ContentProvider,我看到Facebook确实查询了ContentProvider,openFile()被点击了。然而,图像不会出现。

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

    See also my question and answer here.