公司产品是给机顶盒或者电视做的,玩的就是大型游戏,一个游戏常常能有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