超级挂载 实现过程-代码

  公司产品是给机顶盒或者电视做的,玩的就是大型游戏,一个游戏常常能有G级别的数据包,于是产生一个需求,将游戏的数据包存放在外置sdcard上,用户差一个32G的卡能随便玩游戏,不占用设备自身的存储容量(想法很美好,看技术了)。在网上找信息,可以找到有一个超级挂载的产品。反编译看看,大致能知道过程,于是自己写代码实现下。

1、获取内置SDCard

Environment.getExternalStorageDirectory().getAbsolutePath();

 

 

2、获取外置SDCard

a、网上搜到的方法:

获取挂载的设备信息,包括sdacrd、usbotg

public String checkExteralSdcard() {
		String sdcardValue = "";
		BufferedReader localBufferedReader = null;
		HashMap<String, String> dataMap = new HashMap<String, String>();
		try {
			localBufferedReader = new BufferedReader(new FileReader(new File(
					"/system/etc/vold.fstab")));
			String line;
			do {
				line = localBufferedReader.readLine();
				if (line != null)
					line = line.trim();
				if ((line != null) && (line.startsWith("dev_mount"))) {
					String[] arrayOfString = line.split(" ");
					if (arrayOfString.length > 2)
						dataMap.put(arrayOfString[1], arrayOfString[2]);
				}
			} while (line != null);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				localBufferedReader.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		for (String key : dataMap.keySet()) {
			if (key.equals("sdcard")) {
				sdcardValue = dataMap.get(key);
			}
			if (key.equals("usbotg")) {
				sdcardValue = dataMap.get(key);
			}
		}
		return sdcardValue;
	}

 

刚开始以为搞出来了,稍稍多一些测试:华为U9508、华为P6、三星N7100、HTC Desire、HTC One

发现这个方法很不靠谱,其实得到的还是内置sdcard

b、继续搜方法,找到一个帖子说StorageManager.getVolumePaths 可以实现读取,于是反射出StorageManager

不懂反射,参照别的方法写的,代码如下:(还是不贴了)

 

3、挂载

花了一整天时间实现,经测试很不错。

项目代码存网盘备份了。

QQ52604507

 

posted @ 2013-09-11 21:07  Liu Siyuan  阅读(521)  评论(0)    收藏  举报