Android使用Linux mount获取SdCard存储目录
16lz
2021-12-04
Android的智能手机各不相同,现在很多Android智能手机都是自带存储,有的还带有扩展内存的Sdcard卡槽。
在Android开发中,很多时候根据Android提供的获取SdCard存储方法获取不到不到存储目录的位置,由于Android的系统是linux系统,所以我想到使用linux命令mouunt来获取linux的挂载目录。
这样呢,基本上在Android上都可以获取到应用数据存放的目录。
使用命令获取到的目录我并没有遍历,如果你还是获取不到,可以把mount获去到的所有目录都遍历一次。
File sdcard ;@SuppressLint("SdCardPath") public File getSdCardFile() { if (sdcard != null) { return sdcard; } List<String> list = getExtSDCardPath(); boolean isRun = true; if (list.size() > 0) { sdcard = new File(list.get(list.size() - 1)); if (sdcard.isDirectory()) { if (sdcard.getFreeSpace() == 0) { isRun = true; } else { isRun = false; } } } if (isRun) { sdcard = Environment.getExternalStorageDirectory(); if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { sdcard = new File("/sdcard/"); log.e("sdcard spance:" + sdcard.getFreeSpace()); if (sdcard.getFreeSpace() == 0) { sdcard = new File("/sdcard1/"); log.e("sdcard1 space:" + sdcard.getFreeSpace()); } if (sdcard.getFreeSpace() == 0) { sdcard = new File("/sdcard2/"); log.e("sdcard2 space:" + sdcard.getFreeSpace()); } } } log.e("data:" + sdcard.getAbsolutePath()); return sdcard; } public List<String> getExtSDCardPath() { List<String> lResult = new ArrayList<String>(); try { Runtime rt = Runtime.getRuntime(); Process proc = rt.exec("mount"); InputStream is = proc.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String line; while ((line = br.readLine()) != null) { if (line.contains("extSdCard")) { String[] arr = line.split(" "); String path = arr[1]; if (path.lastIndexOf("extSdCard") == path.length() - 9) { File file = new File(path); if (file.isDirectory()) { lResult.add(path); } } } else if (line.contains("/sdcard")) { String[] arr = line.split(" "); String path = arr[1]; if (path.lastIndexOf("/sdcard") == path.length() - 6) { File file = new File(path); if (file.isDirectory()) { lResult.add(path); } } else { String number = path.substring(path.lastIndexOf("/sdcard") + 7); try { Integer.parseInt(number); File file = new File(path); if (file.isDirectory()) { lResult.add(path); } } catch (Exception e) { } } } } isr.close(); } catch (Exception e) { } return lResult; }
不过,首选获取存储还是先使用Android提供的方法,判断并获取Sdcard目录。
//判断sdcard是否存在Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);//如果存在,获取存储File目录Environment.getExternalStorageDirectory();
希望可以帮助到大家,对你有帮助或者觉得值得借鉴的,可以在下方点个赞!谢谢!!!
如有转载请著名来自http://blog.csdn.net/qxs965266509
更多相关文章
- android中的坐标系以及获取坐标的方法
- Android画图学习总结(一)——类的简介
- Android(安卓)中 ProgressBar 和 AlertDialog 的加载的基本使用
- Android获取本机电话号码的简单方法
- Android(安卓)安装环境搭建
- Android5.x+ 格式化外部存储(u盘, sdcard)的方法
- Android获取设备ID号
- android锁屏唤醒并解锁屏幕
- android 时间获取以及时间格式化