使用ContentUri在应用程序之间共享Android

使用ContentUri在应用程序之间共享Android,android,uri,android-contentprovider,android-sharing,Android,Uri,Android Contentprovider,Android Sharing,我想知道在安卓系统的相同设备上,将信息从一个应用程序传递到另一个应用程序的最佳方法 例如: 我打开谷歌应用程序,并与我的应用程序a共享一个文档 谷歌应用程序生成了一个意图并发送了一个内容URI。从我的 要理解,内容uri包含有关文件的信息 (文件名、文件大小、mimetype)以及提取 位于上的google应用程序缓存中的内容 装置 当应用程序A打开时,它读取内容URI。理想情况下,它 应该能够从内容uri和 然后渲染图像。这意味着应用程序A将显示共享的图像。在本例中,谷歌应用程序共享一个文档,

我想知道在安卓系统的相同设备上,将信息从一个应用程序传递到另一个应用程序的最佳方法

例如:

  • 我打开谷歌应用程序,并与我的应用程序a共享一个文档
  • 谷歌应用程序生成了一个意图并发送了一个内容URI。从我的 要理解,内容uri包含有关文件的信息 (文件名、文件大小、mimetype)以及提取 位于上的google应用程序缓存中的内容 装置
  • 当应用程序A打开时,它读取内容URI。理想情况下,它 应该能够从内容uri和 然后渲染图像。这意味着应用程序A将显示共享的图像。在本例中,谷歌应用程序共享一个文档,而应用程序a希望在自己的应用程序中打开并显示文档 令人困惑的部分

    • 从网上搜索,似乎有些人真的试图 从内容URI中提取文件路径。这就要求你 有权访问其他应用的缓存或存储空间 在设备内部。假设这是可能的。这也使一些 假设可以提取文件路径
    • 在阅读了一些文章之后:

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

    解决办法:

  • 即使我无法从中提取文件路径 contentUri,我能够读取contentUri的字节 指向。所以我可以把它保存到一个与 应用程序A的本地缓存并传递该路径以获得渲染或传递 返回字节。这指的是显示内容的应用程序A。这就是传递路径或字节,让我们假设它知道如何显示给定的信息
  • 问题:

  • 这项工作似乎并不理想,因为从技术上讲,你是 在设备上再次保存文件。有两个位置具有 相同的内容(谷歌应用程序存储和应用程序A的存储)。你也 必须管理何时删除您创建的应用程序A的文件。 这似乎并不理想,我想知道什么是最好的 方法是什么?或者这是预期的流量

  • 我也不知道 如果理想的做法是将字节备份,而不是只传递一个文件路径

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

    感谢您的建议, D

    即使我无法从contentUri提取文件路径,我也能够读取contentUri指向的字节

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

    因此,我可以将其保存到一个与应用程序a的本地缓存相关的文件中,并传递该路径以进行渲染或返回字节

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

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

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

    这似乎并不理想,我想知道最好的方法是什么

    不要将字节写入磁盘。就用它们吧

    因此,理想情况下,我希望与读取文件路径保持一致,以便web应用程序支持的其他平台不会中断

    你的选择是:

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

    • 在复制这些数据时遇到问题

    毕竟,请记住,通过
    操作发送给您的
    Uri
    不一定是
    内容
    Uri
    。它很容易成为
    http
    https
    Uri

    即使我无法从contentUri提取文件路径,我也能够读取contentUri指向的字节

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

    因此,我可以将其保存到一个与应用程序a的本地缓存相关的文件中,并传递该路径以进行渲染或返回字节

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

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

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

    这似乎并不理想,我想知道最好的方法是什么

    不要将字节写入磁盘。就用它们吧

    因此,理想情况下,我希望与读取文件路径保持一致,以便