某些软件注册码需要绑定SD卡,这时候需要一个唯一标识码UUID,一般我们会获取SD卡的CID。如何获取CID呢,一般有两种方案:
如上获取的是nand的唯一标识码。
1、通过读取cat /sys/block/mmcblkx/device/cid 来获取,一般过程是先获取device/type更加type的类型来确定设备类型,常见类型mmc,sd,然后再读取device/cid来获取设备唯一标识码。
例如:
private String readDev1() {
String str1 = null;
Object localOb;
try {
localOb = new FileReader("/sys/block/mmcblk1/device/type");
localOb = new BufferedReader((Reader) localOb).readLine()
.toLowerCase().contentEquals("sd");
if (localOb != null) {
str1 = "/sys/block/mmcblk1/device/";
}
localOb = new FileReader(str1 + "cid"); // SD Card ID
str1 = new BufferedReader((Reader) localOb).readLine();
Log.v(TAG, "cid: " + str1);
} catch (Exception e1) {
e1.printStackTrace();
}
return str1;
}这个是获取的mmcblk1一般是sdcard的唯一标识码。
private String readDev0() {
String str1 = null;
Object localOb;
try {
localOb = new FileReader("/sys/block/mmcblk0/device/type");
localOb = new BufferedReader((Reader) localOb).readLine()
.toLowerCase().contentEquals("mmc");
if (localOb != null) {
str1 = "/sys/block/mmcblk0/device/";
}
localOb = new FileReader(str1 + "cid"); // nand ID
str1 = new BufferedReader((Reader) localOb).readLine();
Log.v(TAG, "nid: " + str1);
} catch (Exception e1) {
e1.printStackTrace();
}
return str1;
}
如上获取的是nand的唯一标识码。
2、还有一种方法获取设备cid,就是使用shell命令
/**
* 执行一个shell命令,并返回字符串值
*
* @param cmd
* 命令名称&参数组成的数组(例如:{"/system/bin/cat", "/proc/version"})
* @param workdirectory
* 命令执行路径(例如:"system/bin/")
* @return 执行结果组成的字符串
* @throws IOException
*/
public static synchronized String run(String[] cmd, String workdirectory)
throws IOException {
StringBuffer result = new StringBuffer();
try {
// 创建操作系统进程(也可以由Runtime.exec()启动)
// Runtime runtime = Runtime.getRuntime();
// Process proc = runtime.exec(cmd);
// InputStream inputstream = proc.getInputStream();
ProcessBuilder builder = new ProcessBuilder(cmd);
InputStream in = null;
// 设置一个路径(绝对路径了就不一定需要)
if (workdirectory != null) {
// 设置工作目录(同上)
builder.directory(new File(workdirectory));
// 合并标准错误和标准输出
builder.redirectErrorStream(true);
// 启动一个新进程
Process process = builder.start();
// 读取进程标准输出流
in = process.getInputStream();
byte[] re = new byte[1024];
while (in.read(re) != -1) {
result = result.append(new String(re));
}
}
// 关闭输入流
if (in != null) {
in.close();
}
} catch (Exception ex) {
ex.printStackTrace();
}
return result.toString();
}
然后使用如下命令,其中mxsdhci.o因平台而已,此种方法对与固定平台有效。
String[] cmmd = { "/system/bin/cat",
"/sys/devices/platform/mxsdhci.0/mmc_host/mmc0/mmc0:0001/cid" };
String r = run(cmmd, "system/bin/");
设备的其他信息获取可以参照下面这篇博文:
http://blog.163.com/fan_jianglong@126/blog/static/5617053620121030115532166/
本文介绍了两种获取SD卡CID的方法:一是通过读取/sys/block/mmcblkx/device/cid文件,二是利用shell命令。文中提供了具体的Java代码示例。





