获取 Android 4.3 中的外部存储列表
Posted
技术标签:
【中文标题】获取 Android 4.3 中的外部存储列表【英文标题】:Get a list of external storage in Android 4.3 【发布时间】:2013-09-01 15:57:21 【问题描述】:我一直在扫描 /etc/vold.fstab 以获取外部存储列表。在 Google 删除该文件之前,它工作正常,直到 android 4.3。我知道现在使用了一个统一的 /fstab.* 文件,但没有 root 就无法访问。
那么在 Android 4.3 中,我应该如何获取外部存储列表?
我的代码看起来像这样。现在它包括不可移动的内部存储和可移动的外部存储。
File voldFile = new File("/system/etc/vold.fstab");
fr = new FileReader(voldFile);
br = new BufferedReader(fr);
String line = br.readLine();
while (line != null)
if (line.startsWith("dev_mount"))
String[] tokens = line.split("\\s");
File mountPoint = new File(tokens[2]);
if (mountPoint.isDirectory() && mountPoint.canRead())
list.add(tokens[2]);
line = br.readLine();
【问题讨论】:
关于列表,您的方法是否用于同时获取不可移动的外部存储和真实存储(通常是 sd 卡)?如果是这样,您能说明一下您在早期版本中是如何做到的吗? ***.com/a/15131810/596555 【参考方案1】:我最终扫描了 /proc/mounts 输出以查找当前安装的存储。类似于下面的代码。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2)
File voldFile = new File("/proc/mounts");
fr = new FileReader(voldFile);
br = new BufferedReader(fr);
String line = br.readLine();
while (line != null)
Log.d(TAG, line);
if (line.startsWith("/"))
String[] tokens = line.split("\\s+");
if ("vfat".equals(tokens[2]))
File mountPoint = new File(tokens[1]);
if (!tokens[1].equals(defaultMount))
if (mountPoint.isDirectory() && mountPoint.canRead())
list.add(tokens[1]);
line = br.readLine();
【讨论】:
这里的默认挂载是什么? defaultMount 是 Environment.getExternalStorageDirectory().getAbsolutePath() 返回的值 这仅提供“本地”挂载存储。它不会为您提供从 SD 卡安装的存储空间。以上是关于获取 Android 4.3 中的外部存储列表的主要内容,如果未能解决你的问题,请参考以下文章
Android Environment.getExternalStorageDirectory() 获取的是内部存储还是外部存储?