如何读取SD卡ID号?

Eri*_*ton 17 c++ windows mfc android

如何以编程方式读取SD卡的CID寄存器,其中包含序列号和其他信息?我可以通过Android Java或Native代码来实现吗?

埃里克,提前谢谢

Din*_*ati 13

以下是获取SID和CID的示例代码

if (isExteranlStorageAvailable()) {
    try {
        File input = new File("/sys/class/mmc_host/mmc1");
        String cid_directory = null;
        int i = 0;
        File[] sid = input.listFiles();

        for (i = 0; i < sid.length; i++) {
            if (sid[i].toString().contains("mmc1:")) {
                cid_directory = sid[i].toString();
                String SID = (String) sid[i].toString().subSequence(
                        cid_directory.length() - 4,
                        cid_directory.length());
                Log.d(TAG, " SID of MMC = " + SID);
                break;
            }
        }
        BufferedReader CID = new BufferedReader(new FileReader(
                cid_directory + "/cid"));
        String sd_cid = CID.readLine();
        Log.d(TAG, "CID of the MMC = " + sd_cid);

    } catch (Exception e) {
        Log.e("CID_APP", "Can not read SD-card cid");
    }

} else {
    Toast.makeText(this, "External Storage Not available!!",
            Toast.LENGTH_SHORT).show();
}
Run Code Online (Sandbox Code Playgroud)


del*_*her 7

我设法通过USB将手机插入电脑并使用adb工具(Android SDK)找到我的SD卡CID

$ adb shell
# cat /sys/block/mmcblk0/../../cid
Run Code Online (Sandbox Code Playgroud)

我的手机根植了,所以我不确定这是否可以在非root手机上访问.

也试试

$ adb shell
# cd /sys/block/mmcblk0/../../
# ls
block                 fwrev                 preferred_erase_size
cid                   hwrev                 scr
csd                   manfid                serial
date                  name                  subsystem
driver                oemid                 type
erase_size            power                 uevent
Run Code Online (Sandbox Code Playgroud)

这些内核文档中解释http://www.mjmwired.net/kernel/Documentation/mmc/mmc-dev-attrs.txt


Pau*_*ire 5

到目前为止,我发现唯一提供ID的代码是C ++或C# http: //jo0ls-dotnet-stuff.blogspot.com/2008/12/read-secure-digital-sd-card-serial.html
http: //jo0ls-dotnet-stuff.blogspot.com/2008/12/read-cid-and-csd-c-implementation.html
如果您是C ++开发人员,则可以使用它并使其在Android上运行。


小智 5

我做了这个...它对我有用...希望它能让你清楚!

String getSDCARDiD()
    {
        try {

            File file = new File("/sys/block/mmcblk1");
            if (file.exists() && file.isDirectory()) {

                memBlk = "mmcblk1";
            } else {
                //System.out.println("not a directory");
                memBlk = "mmcblk0";
            }

            Process cmd = Runtime.getRuntime().exec("cat /sys/block/"+memBlk+"/device/cid");
            BufferedReader br = new BufferedReader(new InputStreamReader(cmd.getInputStream()));
            sd_cid = br.readLine();
            //System.out.println(sd_cid);

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return sd_cid;
    }
Run Code Online (Sandbox Code Playgroud)


gre*_*egS 1

尽管相对古老的 Palm 操作系统和 Windows Mobile 操作系统设备能够读取 SD 卡 ID,但据我所知 Android 设备还无法做到这一点。考虑到此处讨论的 Settings.Secure.ANDROID_ID 的问题,这一点尤其令人不安。