在安卓系统中查找SD卡的卷标

10

是否可以找出插入Android设备的SD卡的卷标?

我知道Android只设计有一个“外部存储”(由Environment.getExternalStorageDirectory()返回),但是有很多设备使用内部闪存作为“外部存储”,并在其下挂载SD卡,甚至更复杂的组合(请参见这个问题)。可以通过读取/ proc / mounts来枚举这些附加设备,但我们需要一些东西来向用户识别它们。有没有可能获取到它们的卷标?

我检查了Linux vfat驱动程序完全忽略了卷标dentry,而来自util-linux的blkid读取vfat本身。我还检查了至少在我拥有的设备上,SD卡的块设备模式为660,所有者为 root.root ,因此我无法执行此操作。因此,基本上归结为是否有任何可用于读取它的实用程序。


1
希望这可以帮到你:https://dev59.com/H3A75IYBdhLWcg3wVniI#5191484 - Dinesh Prajapati
@Drax:不,它可能与卷标无关(而且我们已经知道了)。这完全与卷标无关。卷标是用户在计算机上格式化SD卡时指定的内容。 - Jan Hudec
4个回答

1
我找到了一个解决方案。
最简单的解决方案是构建busybox并像这样使用它: busybox blkid
复杂的解决方案是找到适用于Android的blkid,并在其源代码中找到所需内容(blkid_dev_devname函数)。

0

我不确定在安卓系统中是如何工作的,但在Linux系统中,我可以通过内核消息来获取有关挂载SD卡的信息,其中指定了卷名称。您可以尝试使用dmesg和cat /sys/devices/mmc...(或类似命令)。


如果驱动程序完全忽略它,那么dmesg就无法使用它,对吗?正如评论中已经提到的那样,/sys/devices/mmc...是完全不同的东西(它具有CID,我们使用它,但没有卷标,这是一个文件系统的事情,而不是SD卡的事情)。 - Jan Hudec

0
尝试解析blkid命令的输出。这对我有用,但我不确定它是否是基于固件的功能。在AVD上使用此命令时,我遇到了permission denied问题。

我们拥有的设备上没有该命令。如果我自己编译,它也不会工作,因为它没有权限。 - Jan Hudec
blkid 可以在我的设备上(使用自定义的 2.2 固件)和桌面 Linux 系统中不需要 root 权限运行。因此,作为最后的办法,您可能想尝试使用 NDK 的帮助将 blkid 功能包含到您的项目中。这不太容易... - borisstr
当然,在桌面上它可以运行,但那完全无关紧要,因为那不是安卓系统。它可能也能在自定义安卓固件上运行,但这仍然不相关,因为普通用户没有自定义固件。标准固件没有此功能,并且不允许从常规应用程序读取原始设备数据。 - Jan Hudec

-1

我不知道这是否能帮助您:如果您使用DDMS,您可以看到系统的文件夹。对于我的情况,我在 /mnt/media_rw 找到了SD卡。

您可以在这里这里获得更多信息。

希望有所帮助。


不,这并没有帮助,因为ddms没有在设备上运行。现在,如果你找到了ddms获取它们的地方,那可能是另一回事。 - Jan Hudec
我不在设备上运行DDMS。我在连接到设备的计算机上运行DDMS。当然,您的计算机必须识别该设备。 - No More Hello World
因此,对于在火车上某人手中的设备,DDMS是完全无用的。是的,问题没有明确说明,但如果您有一台计算机来分析设备并且知道如何操作,那么您几乎肯定已经知道标签了。有趣的情况是从设备上的应用程序获取标签。 - Jan Hudec

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接