在某些Android版本和其他Linux版本中,可以獲得安裝的SD卡的序列號,例如,通過閱讀/sys/class/mmc_host/mmc0/mmc0:0001/serial
或/sys/block/mmcblk0/device/serial
的內容(具體數字可能會有所不同)。在我的測試中,只要將SD卡插入內置SD卡插槽(未通過USB適配器安裝),就可以非常可靠地工作。如何在Android 7.0+中檢索SD卡的序列號?
但是至於Android 7.0 Nougat,OS is said to be blocking access這個信息,至少在某些設備上。我測試了運行在一個新的阿爾卡特A30 GSM(安卓7.0)一個測試應用程序,而實際上上述方法未能權限錯誤:
java.io.FileNotFoundException: /sys/block/mmcblk0/device/serial (Permission denied)
at java.io.FileInputStream.open(Native Method)
對於未來的參考,我們(從亞行外殼測試)有權ls -ld
如下:
/sys/class/mmc_host
但不/sys/class/mmc_host/mmc0
/sys/block
但不/sys/block/mmcblk0
由於上述方法不再起作用,
有另一種方式獲得的Android 7.0或更高版本的安裝SD卡的序列號?
如果沒有,Google是否有任何文檔或其他聲明提供或不提供此功能?我在Android issue tracker中沒有找到任何東西,但也許我找不到。
要確保問題是清楚的,我說的是什麼一個無根的設備上運行的普通(非系統)的應用程序可以做的,與任何權限的應用程序可以正常地請求和接收。
僅供參考,/sbin
目錄似乎不可讀,所以不能選擇像/sbin/udevadm
這樣的命令。
,我能想到的唯一的事情就是在球場是['getUuid()''上StorageVolume'(https://developer.android.com/參考/機器人/ OS /存儲/ StorageVolume.html#getUuid())。您將從'StorageManager'獲得'StorageVolume'對象。但是,我不知道UUID是否與序列號有關。 – CommonsWare
@CommonsWare:謝謝,我會試試看。我已經閱讀過,卷ID與芯片的序列號無關,但不知道Android上是否屬實。如果'getUuid()'真的返回一個UUID,那麼它不能完全是芯片序列號,因爲後者只有32位。但如果它是基於芯片序列號的可預測數字,那就沒問題。 – LarsH
我沒有更好的選擇給你 - 對不起! – CommonsWare