【问题标题】:How do I provide an image to Facebook via ContentProvider?如何通过 ContentProvider 向 Facebook 提供图片?
【发布时间】:2013-04-08 11:14:48
【问题描述】:

我正在实现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 提供图像?

【问题讨论】:

  • Facebook 应用程序崩溃了吗?如果是,堆栈跟踪是什么?
  • @CommonsWare 不,它只是显示一个 Facebook 输入表单,其中有一个灰色框表示图片的去向,但里面没有图片(当我使用链接问题中的代码时),或者它显示输入条目表单,根本没有框(如果我从查询函数返回 null,或者在返回值的“_data”列中返回 null)。

标签: java android android-intent android-contentprovider


【解决方案1】:

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

FB 从不要求带有openFile(Uri uri, String mode) 的文件并直接访问文件。

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

这里是GitHub Demo

【讨论】:

    【解决方案2】:

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

    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 接受了我的图片。

    See also my question and answer here.

    【讨论】:

      猜你喜欢
      • 2016-01-21
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多