在Android上查找SD卡卷标

在Android上查找SD卡卷标,android,linux,android-sdcard,Android,Linux,Android Sdcard,是否有可能找到插入Android设备的SD卡的卷标 据我所知,安卓系统设计为只有一个“外部存储”(由Environment.getExternalStorageDirectory()返回),但在野外,有相当多的设备使用内部闪存作为“外部存储”,并在其下安装SD卡,甚至更广泛的组合(请参阅)。可以通过读取/proc/mounts来枚举这些附加设备,但我们需要一些东西来向用户标识它们。有没有机会找到他们的卷标 我检查了Linux vfat驱动程序和util Linux中的blkid。我还检查了,至少

是否有可能找到插入Android设备的SD卡的卷标

据我所知,安卓系统设计为只有一个“外部存储”(由
Environment.getExternalStorageDirectory()
返回),但在野外,有相当多的设备使用内部闪存作为“外部存储”,并在其下安装SD卡,甚至更广泛的组合(请参阅)。可以通过读取
/proc/mounts
来枚举这些附加设备,但我们需要一些东西来向用户标识它们。有没有机会找到他们的卷标


我检查了Linux vfat驱动程序和util Linux中的
blkid
。我还检查了,至少在我拥有的设备上,SD卡的块设备有mode
660
和owner
root.root
,所以我不能这样做。因此,基本上,它可以归结为是否有任何实用程序可以读取它。

我不知道它在android中是如何工作的,但在linux中,我有一条关于安装sd卡的内核消息,其中指定了卷名。您可以尝试dmesg和cat/sys/devices/mmc。。。(或者类似的东西)

尝试解析
blkid
命令的输出。它适合我,但我不确定它是否是一个依赖固件的功能。我在AVD上使用此命令获得了被拒绝的
权限。

我找到了解决方案

最简单的解决方案是构建busybox并按如下方式使用: 百事通


复杂的解决方案是找到适用于Android的blkid,并在其源代码中找到您需要的内容(blkid_dev_devname函数)。

我不知道这是否能帮助您:如果您使用DDMS,您可以看到系统的文件夹。就我而言,我在:/mnt/media\u rw中找到了sd卡

您可以获得更多信息和帮助


我希望这会有帮助。

这可能会对你有所帮助@Drax:不,可能不会(而且我们已经知道了)。它与卷标完全无关。卷标是用户在计算机中格式化SD卡时指定的内容。我们现有的设备上没有该命令。如果我自己编译它,它就不会工作,因为它没有权限。
blkid
在我的设备(使用自定义2.2固件)和桌面linux系统上都可以在没有根权限的情况下工作。因此,作为最后的手段,您可能希望在NDK的帮助下尝试将
blkid
功能包括到您的项目中。虽然不容易…当然它可以在桌面上工作,但这完全无关,因为那不是Android。它也可以与定制的Android固件一起工作,但这仍然无关紧要,因为随机用户没有定制的固件。标准固件没有它,也不允许从正常应用程序读取原始设备。如果驱动程序完全忽略它,Dmesg不能拥有它,或者可以吗?正如评论中已经提到的,
/sys/devices/mmc…
是完全不同的东西(它有我们使用的CID,但没有卷标,卷标是文件系统的东西,不是SD卡的东西)。不,它没有帮助,因为ddms没有在设备上运行。现在,如果您找到ddms从何处获取它们,那可能是另一回事。我不会在设备上运行ddms。我在连接到设备的计算机上运行DDMS。当然,你的计算机必须能识别这个设备。因此,DDMS对于火车上某人手中的设备来说是完全无用的。是的,问题并没有明确说明,但如果你有一台计算机来分析设备并知道如何操作,你几乎肯定已经知道标签了。有趣的例子是从设备上的应用程序获取标签。