android开发如何获得不同机型的SD卡路径

From:http://blog.csdn.net/rwecho/article/details/21937795

Android获取外部SDcard的官方调用是
Environment.getExternalStorageDirectory()

但是根据不同机型,是有不同的结果的。
如果手机支持TF卡扩展,并且本身没有大容量存储,比如说HTC老款手机 G3之类的,那么获取到的是TF卡的路径。这是对的。
如果手机本身有大容量存储,不论手机是否支持TF卡扩展,比如现在HTC系列高端手机One X,或者920 butterfly系列,那么获取到的是大容量存储的路径。

也就是说,如果手机本身具有大容量存储,又支持TF卡扩展,通过这条命令是无法获取到TF卡信息的。
我查了半天,没有看到明确获取到扩展存储的API方法,如果有,请你告诉我,谢谢。(cst05001 at 狗妹儿)

那么怎么解决这个问题呢。网上有人说用/sdcard/extSdCard路径之类,这是不对的。因为不同的ROM,对外部存储的挂载点是会不一样的。比如三星国行,挂载点是/Storage/extSdCard 。

这是我从系统角度想到的解决办法,不用越狱,不用权限。大家可以参考:

  1. try {  
  2.             Runtime runtime = Runtime.getRuntime();  
  3.             Process proc = runtime.exec("mount");  
  4.             InputStream is = proc.getInputStream();  
  5.             InputStreamReader isr = new InputStreamReader(is);  
  6.             String line;  
  7.             String mount = new String();  
  8.             BufferedReader br = new BufferedReader(isr);  
  9.             while ((line = br.readLine()) != null) {  
  10.                 if (line.contains("secure")) continue;  
  11.                 if (line.contains("asec")) continue;  
  12.                   
  13.                 if (line.contains("fat")) {  
  14.                     String columns[] = line.split(" ");  
  15.                     if (columns != null && columns.length > 1) {  
  16.                         mount = mount.concat("*" + columns[1] + "\n");  
  17.                     }  
  18.                 } else if (line.contains("fuse")) {  
  19.                     String columns[] = line.split(" ");  
  20.                     if (columns != null && columns.length > 1) {  
  21.                         mount = mount.concat(columns[1] + "\n");  
  22.                     }  
  23.                 }  
  24.             }  
  25.             txtView.setText(mount);  
  26.               
  27.         } catch (FileNotFoundException e) {  
  28.             // TODO Auto-generated catch block   
  29.             e.printStackTrace();  
  30.         } catch (IOException e) {  
  31.             // TODO Auto-generated catch block   
  32.             e.printStackTrace();  
  33.         }  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值