2013-04-08 43 views
2

我正在实施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的图像,而不写入外部存储?如何通过ContentProvider向Facebook提供图片?

+0

Facebook应用程序崩溃了吗?如果是这样,什么是堆栈跟踪? – CommonsWare 2013-04-08 12:14:50

+0

@CommonsWare不,它只是显示一个带有灰色框的脸书输入入口表单,用于显示图片的位置,但它没有图片(当我在链接问题中使用代码时),或者显示输入入口表单根本没有框(如果我从查询函数中返回null,或者返回值的“_data”列为null)。 – BlueMonkMN 2013-04-08 12:54:13

回答

0

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

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

可能在提供程序中有一些标志或xml参数,但我测试了所有可以找到的东西,并且没有使用FB的运气。其他每个分享应用都能正常工作

这里是GitHub Demo

0

我不知道这是否满足您的特定问题,但我已经遇到了类似的问题:

  1. 我提供了一个开放的到的私有目录内的图像我的应用程序
  2. 通过ContentProvider的,我可以访问它通过返回openFile()如下:

    return ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY); 
    
  3. 当分享至Facebook,图像不会出现。然而,每个其他应用程序都可以工作。将调用调试到我的ContentProvider中,我看到Facebook的确在查询ContentProvider,并且openFile()被击中。尽管如此,图像并未出现。

多挠头之后,我意识到我回来null作为MIME类型。我改变了getType()的结果返回“image/png”,就是这样:Facebook接受了我的形象。

See also my question and answer here.

相关问题