在Android的某些版本以及Linux的其他版本中,可以获取已安装SD卡的序列号,例如:通过阅读/sys/class/mmc_host/mmc0/mmc0:0001/serial
或/sys/block/mmcblk0/device/serial
的内容(具体数字可能会有所不同)。在我的测试中,只要将SD卡插入内置SD卡插槽(不通过USB适配器安装),这种方法就非常可靠。
但是至于Android 7.0 Nougat,这个信息的OS is said to be blocking access,至少在某些设备上。我通过在新的阿尔卡特A30 GSM(Android 7.0)上运行测试应用程序对此进行了测试,实际上上述方法因权限错误而失败:
java.io.FileNotFoundException: /sys/block/mmcblk0/device/serial (Permission denied)
at java.io.FileInputStream.open(Native Method)
为了将来参考,我们(从adb shell测试)拥有ls -ld
以下权限:
/sys/class/mmc_host
但不是/sys/class/mmc_host/mmc0
/sys/block
但不是/sys/block/mmcblk0
由于上述方法不再有效,
是否有其他方法可以获取Android 7.0或更高版本中安装的SD卡的序列号?
如果没有,Google是否有关于提供或不提供此功能的计划的任何文件或其他声明?我还没有在Android issue tracker中找到任何内容,但也许我没有正确搜索。
为了确保问题清楚,我正在谈论在非根设备上运行的普通(非系统)应用程序可以做什么,以及应用程序通常可以请求和接收的任何权限。< / p>
仅供参考,/sbin
目录似乎无法读取,因此/sbin/udevadm
之类的命令不是一个选项。
答案 0 :(得分:5)
在Android N中,对/ sys nad / proc的访问受到严重限制,这样做是为了提供应用程序运行的更严格的沙箱。这在https://issuetracker.google.com/issues/37091475中有意解释。实际上并没有说/ sys中的所有数据都无法访问,谷歌开放允许从这个位置访问其他文件:
如果/ sys中存在特定文件,您认为这些文件应该可供应用程序使用,但不是,请提交一个可以评估请求的新错误。例如,/ sys / devices / system / cpu可用于所有进程,因此说所有/ sys都受到限制是不准确的。
我有一种不好的感觉,谷歌正在进行类似于Apple的更改,因为它不允许获得硬件ID。如果没有解决,那么解决方案是使用谷歌帐户ID。但我知道这并不总是可行的,并且需要对业务逻辑进行重大更改(许可等)。
希望您的bug report会被正面考虑。
另一个相关的SO我发现:File system changes in Android Nougat
答案 1 :(得分:1)
在StorageVolume上使用StorageVolume.getUuid(),它是从StorageManager获得的。
该值是在格式化卡期间分配的卷ID,其长度/格式因文件系统类型而异。对于FAT32,它是XXXX-XXXX,对于NTFS,它是更长的十六进制字符串,对于内部大容量存储,它返回null。
答案 2 :(得分:0)
awk -v value="$test" '$3=$3 FS value ....' input
试试这个:参考原始链接:Android get id of SD Card programmatically
答案 3 :(得分:0)
adb shell cat /sys/class/mmc_host/mmc1/mmc1:*/cid
您也可以尝试
sudo hwinfo --disk
获取有关磁盘的信息,包括SD卡。
也可以尝试
sudo hdparm -I /dev/sdb | more
答案 4 :(得分:0)
对于在Android下查看FAT类型卷的UUID或卷序列号的人来说,仅供参考:某些Fujifilm相机(包括X-T30(固件1.10))在格式化时不会将卷序列号写入FAT卷。 / p>
在Windows下,CHKDSK完全不显示卷序列号。 在Android上,调用StorageVolume.getUuid()返回“ 0000-0000”。
一切正常,直到您在Android上通过集线器安装了两张Fujifilm格式的卡。然后似乎出现了身份冲突,Android OS提示用户格式化其中一张卡。它们分别是可访问的。
我猜这里有两个综合问题: 1)格式化时Fujifilm没有写卷序列号,并且 2)Android使用卷序列号作为安装点路径的一部分,从而导致冲突。
Fujifilm和Google可能都希望关注这个问题。