2016-11-15 104 views
0

所以,我想读从任何连接USB OTG驱动一个非常具体的文件。这是一个文本文件,应该存储在U盘上,我需要读取该文件,该文件有一个特定的名称,如myFile.txt。虽然我明白这种获得用户输入的方式是愚蠢的,但不方便用户使用,这是我被告知需要实现的。如何通过存储访问架构得到OTG文件

但我的问题是,有很多挂载USB驱动器分。我的电话是/storage/USBStorage1,而我的朋友是/storage/[HEX_ID]。我试图获得所有这些,但这是不可能的。在Nexus手机中,它安装在要求root访问的/mnt/media_rw/[HEX_ID]上。

我搜索周围一点点,发现SAF,但我没有找到如何使用它来打开任何文件,而无需用户直接选择什么。我不想让选取者出现。我只想检查是否存在[USB_OTG_PATH]/myFile.txt,如果存在,我想阅读它。

而在旁注上,我是否需要root权限才能读取/mnt文件夹(media_rw除外)?

+0

现代系统也将是getExternalFilesDirs交付()'[了'File'对象的一个​​变化。 – greenapps

+0

@greenapps:仅当文件恰好位于其中一个目录中时。 OP似乎希望该文件位于任意位置。 – CommonsWare

+0

@CommonsWare:从该文件对象OP可以派生驱动器的根。从那里他增加了他的路径。根是'/ Android /'之前的部分。 – greenapps

回答

0

我没有找到关于如何使用它来打开任何文件,而无需用户直接选择

那是因为没有此选项没有任何东西。

我只想检查[USB_OTG_PATH] /myFile.txt是否存在,如果存在,我想读取它。

不支持。

如果文件位于由getExternalFilesDirs()getExternalCacheDirs()返回目录之一,getExternalMediaDirs()然后您可以直接访问它使用普通的Java文件I/O。然而,据我所知,该目录需要为运行你的应用程序—另一家开发商跑进试图提前创建目录问题的一部分被创建。因此,对于您的使用案例,这种方法不太可行,但运气好的话我错了,它对您有用。

我需要root acces才能读取/ mnt文件夹(media_rw除外)吗?

在一般情况下,是的,但在实践中答复设备,Android操作系统版本等

+0

不,我的文件不在外部目录中。这应该是在一个USB棒,该应用程序应该只在棒插入时工作。 –

+0

@ III.6:“它应该在USB棒” - “getExternalFilesDirs()','getExternalCacheDirs()和'getExternalMediaDirs()'都会返回一个'File []'。如果该阵列具有2+条目,则第二个和后续条目位于可移动存储设备上,例如USB OTG驱动器。这些目录可以使用普通Java文件I/O在没有权限的情况下读取和写入。 – CommonsWare

+0

但它没有。在我的手机上,他们每个人都返回一个大小为1的数组,并且所有人都有前缀'/ storage/emulated/0/Android /',而我的手柄安装在'/ storage/USBstorage1'中。 –