android得到外置sd卡路径和判断外置sd卡是否卸载,已经验证20个机型左右
2014-04-03 11:36
513 查看
这个问题苦恼了好久。我这里有大约20台不同厂商的机器,包括平板和手机。
最后,我这个方案,是从网上的方法总结得出的。目前我这里的这20台机器已经测试通过。如果各位同仁发现不支持的机型,麻烦把机型说一下,我改一下。
注意,判断外置sd卡是否卸载不能直接判断得到外置sd卡路径是否为空,即使外置sd卡卸载时,得到的路径,在拔出sd卡5秒内仍然可能不为空。这个问题我当时也纠结好久。
代码如下:
最后,我这个方案,是从网上的方法总结得出的。目前我这里的这20台机器已经测试通过。如果各位同仁发现不支持的机型,麻烦把机型说一下,我改一下。
注意,判断外置sd卡是否卸载不能直接判断得到外置sd卡路径是否为空,即使外置sd卡卸载时,得到的路径,在拔出sd卡5秒内仍然可能不为空。这个问题我当时也纠结好久。
代码如下:
package cn.keyshare.utils; import java.io.BufferedReader; import java.io.File; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import android.os.Environment; public class SdCardUtils { // 返回值不带File seperater "/",如果没有外置第二个sd卡,返回null public static String getSecondExterPath() { List<String> paths = getAllExterSdcardPath(); if (paths.size() == 2) { for (String path : paths) { if (path != null && !path.equals(getFirstExterPath())) { return path; } } return null; } else { return null; } } public static boolean isFirstSdcardMounted(){ if (!Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { return false; } return true; } public static boolean isSecondSDcardMounted() { String sd2 = getSecondExterPath(); if (sd2 == null) { return false; } return checkFsWritable(sd2 + File.separator); } // 测试外置sd卡是否卸载,不能直接判断外置sd卡是否为null,因为当外置sd卡拔出时,仍然能得到外置sd卡路径。我这种方法是按照android谷歌测试DICM的方法, // 创建一个文件,然后立即删除,看是否卸载外置sd卡 // 注意这里有一个小bug,即使外置sd卡没有卸载,但是存储空间不够大,或者文件数已至最大数,此时,也不能创建新文件。此时,统一提示用户清理sd卡吧 private static boolean checkFsWritable(String dir) { if (dir == null) return false; File directory = new File(dir); if (!directory.isDirectory()) { if (!directory.mkdirs()) { return false; } } File f = new File(directory, ".keysharetestgzc"); try { if (f.exists()) { f.delete(); } if (!f.createNewFile()) { return false; } f.delete(); return true; } catch (Exception e) { } return false; } public static String getFirstExterPath() { return Environment.getExternalStorageDirectory().getPath(); } public static List<String> getAllExterSdcardPath() { List<String> SdList = new ArrayList<String>(); String firstPath = getFirstExterPath(); // 得到路径 try { Runtime runtime = Runtime.getRuntime(); Process proc = runtime.exec("mount"); InputStream is = proc.getInputStream(); InputStreamReader isr = new InputStreamReader(is); String line; BufferedReader br = new BufferedReader(isr); while ((line = br.readLine()) != null) { // 将常见的linux分区过滤掉 if (line.contains("secure")) continue; if (line.contains("asec")) continue; if (line.contains("media")) continue; if (line.contains("system") || line.contains("cache") || line.contains("sys") || line.contains("data") || line.contains("tmpfs") || line.contains("shell") || line.contains("root") || line.contains("acct") || line.contains("proc") || line.contains("misc") || line.contains("obb")) { continue; } if (line.contains("fat") || line.contains("fuse") || (line .contains("ntfs"))) { String columns[] = line.split(" "); if (columns != null && columns.length > 1) { String path = columns[1]; if (path!=null&&!SdList.contains(path)&&path.contains("sd")) SdList.add(columns[1]); } } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } if (!SdList.contains(firstPath)) { SdList.add(firstPath); } return SdList; } }
相关文章推荐
- android得到外置sd卡路径和判断外置sd卡是否卸载
- Android判断是否存在外置SD卡(获取手机所有存储设备的路径)
- Android 获取SD卡路径和判断SD卡是否存在.
- Android 获取SD卡路径和判断SD卡是否存在
- Android 获取SD卡路径和判断SD卡是否存在.
- Android判断是否挂载外置sd卡
- Android 判断是否有外置SD卡(包含手机存储的情况下)
- Android 获取SD卡路径和判断SD卡是否存在
- Android判断SD卡是否已经挂载的方法
- 总结:android 创建快捷方式的两种方式+判断是否已经创建+删除快捷方式
- 对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一, 现给出一正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到。
- Android融云判断是否用户已经加入黑名单和加入&移除黑名单
- android获取外置sd卡路径
- H-UI的前端处理验证,判断是否已经存在,比较健全的模板,可以自己添加一些校验
- Android 判断sd卡和sim卡是否可用
- android 获取路径目录方法以及判断目录是否存在,创建目录 (转)
- 对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一, 现给出一正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到。
- Android 判断SD卡是否存在及容量查询
- android中判断service是否已经启动
- Android判断网络是否已经连接