Android存储访问框架-文档contract.Document.COLUMN\u Document\u ID的可移植性如何?

Android存储访问框架-文档contract.Document.COLUMN\u Document\u ID的可移植性如何?,android,storage-access-framework,Android,Storage Access Framework,经过多年的目录管理器开发,我终于找到了修改SD卡文件的方法。这是通过使用存储访问框架实现的,api级别>=21 问题是,文件合同是高度非法的 我使用的是安卓7.0。并注意到DocumentsContract.Document.COLUMN\u Document\u ID是一个部分文件系统路径 id = F6F5-1B1D:Download/download filepath = /storage/F6F5-1BD/Download/download 这对我有好处,因为我可以将文档Uri转换为其

经过多年的目录管理器开发,我终于找到了修改SD卡文件的方法。这是通过使用存储访问框架实现的,api级别>=21

问题是,文件合同是高度非法的

我使用的是安卓7.0。并注意到DocumentsContract.Document.COLUMN\u Document\u ID是一个部分文件系统路径

id = F6F5-1B1D:Download/download
filepath = /storage/F6F5-1BD/Download/download
这对我有好处,因为我可以将文档Uri转换为其文件系统路径,而不是递归地查询子Uri以匹配文件系统路径

我现在的问题是,也许不是所有的安卓7设备都会返回这种Uri结构。我想我读到Android kitkat文档id是一个整数。同时,Android 8文档id与文件系统路径相同

我使用的是安卓7.0。并注意到DocumentsContract.Document.COLUMN\u Document\u ID是一个部分文件系统路径

id = F6F5-1B1D:Download/download
filepath = /storage/F6F5-1BD/Download/download
对于那个特定的设备,对于那个特定的文档提供者,对于那个特定的文档,可能就是这样

我现在的问题是,也许不是所有的安卓7设备都会返回这种Uri结构

它没有严格地绑定到操作系统版本。例如,所有安卓7设备都将返回其他文档提供商的其他结构,如谷歌硬盘

除此之外,即使对于外部存储提供商,这种行为也可以通过以下方式改变:

  • 谷歌,在操作系统版本或更新系统组件通过播放商店
  • 设备制造商,如果他们自己提供此文档提供程序的实现
  • 用户(如果已安装自定义固件)

将标识符视为不透明值。不要根据其值中的明显模式进行假设。

是的,安全性通常可以转换为文件系统路径。这很有趣。但还有什么?你会用这条路干什么?你可以用saf做所有的事情。在使用路径的可移动媒体上,您只有读取权限。它没有给我带来什么。你为什么想要一条路径?@blackapps问得好。我试图用java.io.File实现内部存储,用SAF实现SD卡。一般来说,我不完全理解SAF,所以我需要更好地理解它,看看是否可以简单地将它用于所有事情。你应该为所有分区制作一个文件资源管理器。主要、次要(micro SD卡)和usb otg。你应该为相同的分区制作一个saf浏览器。@blackapps你问我为什么需要一个java.io.File。我一直在检查我的代码,尝试实现SAF。java.io.File已经很成熟了!无论如何,我有一个文件路径分支视图,允许用户单击文件路径的任何分支。这当然需要我知道文件路径,而不是一些不透明的ID。或者想想看,我可以有一个分支ID列表,并将每个ID作为标记分配给我的分支视图。然后,当我单击一个分支时,我使用ID句柄打开该分支路径。我不清楚你在做什么。通过操作\打开\文档\树,您可以让用户选择所有分区。有了树uri,您可以列出其中的所有子目录和文件。递归地。你还需要什么?不需要路径。谢谢你的回答。这不是一个假设,而是一个假设。但您清楚地声明,将id视为不透明的值。我可以问一下你是否在Android标准中读过吗?@user13947194:“我可以问一下你是否在Android标准中读过吗?”——如果说“那”,你的意思是将ID视为不透明值,而不是在我写的时候。我已经为计算机编程超过35年了,在这一过程中你学到了很多东西。不过,现在我碰巧看到,它具有“文档的唯一ID。该ID由DocumentsProvider提供并解释,客户端应用程序应将其视为不透明值”。我最终使用SAF实现了浏览。我现在的问题是打开文件。大多数第三方活动不支持文档uri。因此,我需要转换为内容uri。但是怎么做呢?注意:如果我能够转换为内容uri,我将同时能够获得真实的文件路径。@user13947194:“大多数第三方活动不支持文档uri”--这将是相当令人惊讶的,因为多年来使用Gmail都需要它。试着用意向操作视图打开一个文件