使用ContentUri在应用之间进行Android共享

时间:2016-10-23 18:34:01

标签: android uri android-contentprovider android-sharing

我想知道将信息从应用程序传递到Android中相同设备上的另一个应用程序的最佳方法。

例如:

  1. 我打开谷歌应用程序,并与我的应用程序A共享文档。
  2. Google App生成了一个intent并发送了一个内容URI。从我的     理解,内容uri包含有关文件的信息     (文件名,文件大小,mimetype)和提取的能力     内容位于谷歌应用程序的缓存中     设备
  3. 当App A打开时,它会读取内容URI。理想情况下,它     应该能够从内容uri中提取信息     然后渲染图像。这意味着App A将显示共享的图像。在此示例中,谷歌应用程序共享一个文档,而应用程序A想要打开并在其自己的应用程序中显示该文档。
  4. 令人困惑的部分

    看起来,理想情况下,你永远不应该假设你可以提取文件路径,谷歌已经做了一些更新,这使得这不可能。

    解决方法:

    1. 尽管我无法从中提取文件路径 contentUri,我能够读取contentUri的字节 指向。所以我可以将它保存到与该文件相关的文件中 App A的本地缓存并传递该路径以获取渲染或传递 字节回来了。这是指App A显示内容。这就是传递路径或字节,让我们假设它知道如何在给定信息的情况下显示它。
    2. 问题:

      1. 这种解决方法似乎并不理想,因为从技术上讲,你是这样 将文件再次保存在设备上。有两个位置 相同的内容(谷歌应用程序存储和应用程序A的存储)。你也是 必须管理何时删除您创建的App A的文件。 这看起来并不理想,并且想知道什么是最好的 方法会是什么?或者这是预期的流量?

      2. 我也不知道     如果将字节备份传递给文件路径是理想的。

      3. 更新

        更具体地说,我正在创建的应用程序是混合,我使用cordova插件与Web应用程序进行交互。 Web应用程序具有基于文件路径处理或显示共享文档的方法。理想情况下,我希望保持一致,只需读取文件路径,以便Web应用程序支持的其他平台不会中断。

        任何建议表示赞赏, d

1 个答案:

答案 0 :(得分:2)

  

尽管我无法从contentUri中提取文件路径,但我能够读取contentUri指向的字节。

正确。这与使用HTTPS URL的方式没有显着差异,在这种情况下,您也没有对内容的直接文件系统访问权限(在这种情况下,驻留在不同的服务器上)。

  

所以我可以将它保存到与App A的本地缓存相关的文件中,并传递该路径以获取渲染或传回字节。

或者,只消耗字节。再次,类似于HTTPS URL,不需要将这些字节保存到磁盘以使用它们。

  

解决方法看起来并不理想,因为从技术上讲,您将再次在设备上保存文件。有两个位置具有相同的内容(谷歌应用程序存储和应用程序A的存储)。您还必须管理何时删除您创建的应用程序文件。

然后不要再次在设备上保存文件,只需使用字节流。同样,这与使用HTTPS URL没有显着差异。

  

这看起来并不理想,并且想知道最好的方法是什么?

不要将字节写入磁盘。只需使用它们。

  

理想情况下,我希望保持一致,只需阅读文件路径,以便Web应用程序支持的其他平台不会中断。

您的选择是:

  • 改进Web应用程序代码,使本地文件路径一个可能的数据源,或

  • 遇到复制该数据的问题

毕竟,请注意,通过Uri提供的ACTION_SEND不一定是content Uri。它很容易成为httphttps Uri