android下如何读取nand、sd卡cid等其他信息

某些软件注册码需要绑定SD卡,这时候需要一个唯一标识码UUID,一般我们会获取SD卡的CID。如何获取CID呢,一般有两种方案:

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/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值