【发布时间】:2016-10-23 18:34:00
【问题描述】:
我想知道在 android 中将信息从一个应用传递到同一设备上的另一个应用的最佳方法。
例如:
- 我打开 google 应用程序并与我的应用程序 A 共享一个文档。
- Google App 生成了一个意图并发送了一个内容 URI。从我的 理解,内容uri包含文件的信息 (文件名、文件大小、mimetype)和提取 位于 Google 应用程序缓存中的内容 设备。
- 当应用 A 打开时,它会读取内容 URI。理想情况下,它 应该能够从内容 uri 中提取信息,并且 然后渲染图像。这意味着 App A 将显示共享的图像。在这个例子中,谷歌应用程序共享一个文档,应用程序 A 想要在它自己的应用程序中打开并显示该文档。
令人困惑的部分
- 从网上搜索,似乎有些人真的试图 从内容 URI 中提取文件路径。这需要你 有权访问其他应用的缓存或存储空间 设备内。假设这是可能的。也让一些 假设可以提取文件路径。
看了一些文章后:
https://commonsware.com/blog/2016/03/14/psa-file-scheme-ban-n-developer-preview.html
https://commonsware.com/blog/2014/07/04/uri-not-necessarily-file.html
https://commonsware.com/blog/2016/03/15/how-consume-content-uri.html
看来,理想情况下,您永远不应该假设您可以提取文件路径,并且谷歌已经进行了一些更新,这使得这不可能。
解决方法:
- 尽管我无法从 contentUri,我可以读取 contentUri 的字节数 指向。所以我可以将它保存到与 App A 的本地缓存并传递该路径以获取渲染或传递 字节回来。这是指 App A 显示内容。那就是传递路径或字节,让我们假设它知道如何在给定信息的情况下显示它。
问题:
解决方法似乎并不理想,因为从技术上讲,您是 在设备上再次保存文件。有两个位置 相同的内容(谷歌应用存储和应用 A 的存储)。你也 必须管理何时删除您创建的 App A 的文件。 这看起来并不理想,想知道什么是最好的 方法是什么?或者这是预期的流量?
我也不知道 如果将字节备份与仅传递文件路径比较理想。
更新
更具体地说,我正在创建的应用程序是一个混合应用程序,我使用 cordova 插件与网络应用程序进行交互。 Web 应用程序具有根据文件路径处理或显示共享文档的方法。因此,理想情况下,我希望与仅读取文件路径保持一致,以便 Web 应用程序支持的其他平台不会中断。
任何建议表示赞赏, D
【问题讨论】:
-
请更详细地解释“传递该路径以获取渲染或传回字节”的含义以及“将字节向上传递”的含义。 App A 究竟应该对
Uri所代表的内容做什么? -
已更新:假设在我的用例中,这是一个谷歌应用程序试图与应用程序 A 共享的谷歌文档。内容 URI 是由谷歌应用程序生成的,所以我无法控制它是如何生成的编码但只能假设它知道如何访问文档。我能够读取文档的字节,但无法访问它的存储位置。应用程序 A 假设读取文件并显示它。在这种情况下,请阅读共享文档并显示它。
标签: android uri android-contentprovider android-sharing