我的应用程序中有一个非常粗略但有效的文件系统浏览器,它直到最近才发现(我假设直到我,更糟糕的是,我的用户,更新到Marshmallow)。
它的基本工作非常简单:我让用户从SD卡(我从Environment.getExternalStorageDirectory()
获得)开始,然后在浏览器中显示相关文件和所有目录,人为添加..
目录用于向上导航树,除非当前目录不是/
。
正如我所说,它工作得很好,并且有很多非常理想的属性:
/data/data
目录)/
文件系统,然后回到(可能是不同的)SD卡现在它不再起作用了,这不是运行时权限的问题(我确实检查过那个部分)。
发生的情况如下:
/storage/emulated/0
/storage/emulated
,因此我不能到达/
文件系统 从/
开始也没有帮助,因为/storage/emulated
仍然无法从/storage
列出(不是我原本期望的不同),因此我被隔离了根文件系统。
问题1 :有没有办法可以从这个类似于Windows的C:
/ D:
/ E:
公牛来恢复... 强大> Os开发人员误导和人为地将我们降级,并取回(美丽的)POSIX文件系统,这是真正的Android的与生俱来的权利?
问题2 :如果没有,是否至少有办法获取所有SD卡位置的列表,以便能够模拟以前的行为?
谢谢!
答案 0 :(得分:1)
我让用户从SD卡开始(我从Environment.getExternalStorageDirectory()获得)
External storage在大多数Android设备上都不是removable storage。
然后我在浏览器中显示相关文件和所有目录,人工添加..目录以向上导航树,除非当前目录不是/已经。
不要求应用程序可以读取getExternalStorageDirectory()
之类的方法返回的目录之上的目录。通常,正如POSIX文件系统的用户可以证明的那样,仅仅因为您有权访问目录并不意味着您可以访问父目录或对等目录。
我可以很好地导航存储子目录(我有权限),但是我无法进入/ storage / emulated,因此,我无法访问/ filesystem
这不是您的Nexus 5和Android 6.0所独有的。你会遇到这样的问题,因为你假设你对父目录有读访问权,而且这个假设并不普遍有效。例如,在Android 4.2+平板电脑和Android 5.0+手机上,辅助用户帐户对于Environment.getExternalStorageDirectory()
等内容的路径将与您习惯使用的路径不同。
从'2'开始,我无法从一张SD卡转到另一张SD卡(!!!)
您在Android 4.4及更高版本上无权访问removable storage。
问题1:有没有办法从这个类似C的窗口恢复:/ D:/ E:公牛......这些开发人员误导并人为地将我们降级,并取回(漂亮的)POSIX文件系统是真正的Android的与生俱来的权利吗?
您可以对设备进行root操作,然后安排以超级用户权限分叉进程,这些进程具有对文件系统所有方面的读访问权。
否则,与其他POSIX文件系统一样,您无权访问所有内容。
问题2:如果没有,是否至少有办法获得所有SD卡位置的列表,以便能够模拟以前的行为?
没有。首先,如前所述,由于POSIX文件系统权限,您之前的行为已经不可靠。其次,由于文件系统权限,您无法再次访问可移动存储。
欢迎您在getExternalFilesDirs()
上调用Context
(注意复数)等方法。如果设备具有可移动存储,则这些方法返回的第二个和后续File
对象将指向可读取和写入的可移动存储上的位置。但是,您将无法访问可移动存储上的父目录或其他随机位置。