2015-08-30 30 views
0

我添加了从另一个(Windows)应用程序导入特定类型文件格式的支持。这种特殊的格式将数据保存在一对文件中。这些文件使用相同的文件名,具有不同的扩展名,例如myfile.extmyfile.ex2Android:打开一对文件时解析URI路径

的情况如下:

  1. 用户从下拉框myfile.ext,谷歌驱动器或其他
  2. 通过了解文件名/路径,我想在同一地点,以解决myfile.ex2并打开它

的问题是,当使用URI从文件选择器提供的URI的这个样子的:

content://com.google.android.apps.docs.storage/document/acc%3D1%3Bdoc%3D154 

有几种解决方案涉及使用getContentResolver()获取真实文件名,并从返回的光标中选取原始文件名。

有没有一种通用的方式来获取具有实际文件名的绝对路径,更改扩展名并打开它?

回答

0

有几种解决方案涉及使用getContentResolver()获取真实文件名,并从返回的光标中选择原始文件名。

没有哪一个可以可靠地工作,特别是对于您引用的提供者。

有没有一种通用的方式来获得具有实际文件名的绝对路径,更改扩展名并打开它?

首先,没有绝对的路径,因为有问题的文件不必是设备上。毕竟,“Dropbox,谷歌驱动器或其他”是云服务,至少对于“其他”的许多值。没有要求只是因为云服务将一个文件下载到设备,那就是必须将所有文件下载到设备。

其次,没有必要使用的绝对路径,因为智能编写的“Dropbox,谷歌驱动器或其他”将在您的应用程序无法访问的应用程序的内部存储部分中拥有这些文件。

第三,Uri是一个不透明的句柄,就像一个URL一样。 “Dropbox,谷歌驱动器或其他”网站不要求在其服务所持有的两个任意文件之间提供Web URL相对寻址。类似地,不要求设备上文件提供商在其服务所持有的两个任意文件之间提供相对寻址,或者甚至不使用可识别的文件名。

,我看到你的主要选项有:

  1. 让用户挑选的每个文件。

  2. 让用户合并文件,例如将它们放入ZIP存档中。

  3. 让用户挑选的每个文件,但在一个存储访问架构ACTION_OPEN_DOCUMENT操作,通过EXTRA_ALLOW_MULTIPLE(警告:只有实际的,如果你minSdkVersion为19或更高,你将不得不处理的情况下用户的螺丝并没有选择恰好两个文件)。

  4. 让用户组织文件,如把它们放在一个目录/文件夹,并使用存储访问架构的ACTION_OPEN_DOCUMENT_TREEIntent(警告:只有实际的,如果你minSdkVersion为21或更高)。

  5. 切换到使用直接Web服务API的任何您希望与其集成的服务,如果他们通过他们的API提供更适合您的东西。