Android双SD卡路径获取

来源:互联网 发布:网络推编辑 编辑:程序博客网 时间:2024/05/01 22:10

Android双SD卡路径获取

大家都知道获取外部存储目录的方法,但是你有没有遇到过这个情况, Environment.getExternalStorageState(),返回 ”removed“,但是你使用re管理器却能看到手机内置sd卡,此时使用Environment.getExternalStorageDirectory().getAbsolutePath()却能返回该地址,并且能正常读写。
如果你只想在外置sd卡读写文件,那好了,这篇文章正适合你,看官可以看下去了,请测有效。

public class Utils {/** * 获取手机自身内存路径/data目录 *  */public static String getPhoneCardPath() {return Environment.getDataDirectory().getAbsolutePath();}/** * 获取sd卡路径 双sd卡时,根据”设置“里面的数据存储位置选择,获得的是内置sd卡或外置sd卡 *  * @return */public static String getNormalSDCardPath() {return Environment.getExternalStorageDirectory().getPath();}/** * 获取sd卡路径 双sd卡时,获得的是外置sd卡 *  * @return */public static String getSDCardPath() {String cmd = "cat /proc/mounts";Runtime run = Runtime.getRuntime();// 返回与当前 Java 应用程序相关的运行时对象BufferedInputStream in = null;BufferedReader inBr = null;try {Process p = run.exec(cmd);// 启动另一个进程来执行命令in = new BufferedInputStream(p.getInputStream());inBr = new BufferedReader(new InputStreamReader(in));String lineStr;while ((lineStr = inBr.readLine()) != null) {// 获得命令执行后在控制台的输出信息Log.i("CommonUtil:getSDCardPath", lineStr);if (lineStr.contains("sdcard")&& lineStr.contains(".android_secure")) {String[] strArray = lineStr.split(" ");if (strArray != null && strArray.length >= 5) {String result = strArray[1].replace("/.android_secure","");return result;}}// 检查命令是否执行失败。if (p.waitFor() != 0 && p.exitValue() == 1) {// p.exitValue()==0表示正常结束,1:非正常结束Log.e("CommonUtil:getSDCardPath", "命令执行失败!");}}} catch (Exception e) {Log.e("CommonUtil:getSDCardPath", e.toString());// return Environment.getExternalStorageDirectory().getPath();} finally {try {if (in != null) {in.close();}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {if (inBr != null) {inBr.close();}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return Environment.getExternalStorageDirectory().getPath();}// 查看所有的sd路径public String getSDCardPathEx() {String mount = new String();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) {if (line.contains("secure"))continue;if (line.contains("asec"))continue;if (line.contains("fat")) {String columns[] = line.split(" ");if (columns != null && columns.length > 1) {mount = mount.concat("*" + columns[1] + "\n");}} else if (line.contains("fuse")) {String columns[] = line.split(" ");if (columns != null && columns.length > 1) {mount = mount.concat(columns[1] + "\n");}}}} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return mount;}// 获取当前路径,可用空间public static long getAvailableSize(String path) {try {File base = new File(path);StatFs stat = new StatFs(base.getPath());long nAvailableCount = stat.getBlockSize()* ((long) stat.getAvailableBlocks());return nAvailableCount;} catch (Exception e) {e.printStackTrace();}return 0;}}


0 0
原创粉丝点击