文档章节

获取android系统外置存储卡路径的方法

小小_小小
 小小_小小
发布于 2014/03/18 14:11
字数 324
阅读 3078
收藏 9

    android系统可通过Environment.getExternalStorageDirectory()获取存储卡的路径,但是现在有很多手机内置有一个存储空间,同时还支持外置sd卡插入,这样通过Environment.getExternalStorageDirectory()方法获取到的就是内置存储卡的位置,需要获取外置存储卡的路径就比较麻烦,这里借鉴网上的代码,稍作修改,在已有的手机上做了测试,效果还可以,当然也许还有其他的一些奇葩机型没有覆盖到,如果您看到这个文章后测试有问题,欢迎留言跟我交流,大家互相学习进步,关键代码如下:

 

 

//获取外置存储卡的根路径,如果没有外置存储卡,则返回null 
public String getPath2() {
  String sdcard_path = null;
  String sd_default = Environment.getExternalStorageDirectory()
    .getAbsolutePath();
  if (sd_default.endsWith("/")) {
   sd_default = sd_default.substring(0, sd_default.length() - 1);
  }
  // 得到路径
  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") && line.contains("/mnt/")) {
     String columns[] = line.split(" ");
     if (columns != null && columns.length > 1) {
      if (sd_default.trim().equals(columns[1].trim())) {
       continue;
      }
      sdcard_path = columns[1];
     }
    } else if (line.contains("fuse") && line.contains("/mnt/")) {
     String columns[] = line.split(" ");
     if (columns != null && columns.length > 1) {
      if (sd_default.trim().equals(columns[1].trim())) {
       continue;
      }
      sdcard_path = columns[1];
     }
    }
   }
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return sdcard_path;
 }

© 著作权归作者所有

小小_小小
粉丝 4
博文 14
码字总数 4965
作品 0
海淀
私信 提问
Android手机自带内部存储路径的获取

我有一台中兴的Android手机,型号是 ZTE U930HD,手机没有插入外置SD卡(也就是Micro SD Card,原名Trans-flash Card(TF卡),2004年正式更名为Micro SD Card),但是机身自带了一个内置存储...

Cundong
2014/07/08
0
3
如何区分手机内置存储卡与外置存储卡

android系统自从升级到2.3以后,多一个功能,可以判断存储卡是否是可以卸载的。Environment.isExternalStorageRemovable(),通过此方法我们可以知道手机上的存储卡是手机自带的还是外边可插拔...

wanyang
2014/01/07
0
0
析:自定义适配器实现Grid View和Gallery碰到到问题。

在: http://www.oschina.net/code/snippet1512879426上学习grid view,不过做学习代码到过程中碰到一下问题: 1.运行起来之后,APP会异常结束; 2.copy数据到模拟终端到sdcard中; 问题1.运...

垂盆草
2012/08/18
0
0
Android 开发常用代码片段

1、图片旋转 2、获取手机号码 3.格式化string.xml 中的字符串 4、android设置全屏的方法 A.在java代码中设置 B、在AndroidManifest.xml中配置 5、设置Activity为Dialog的形式 在AndroidMani...

长平狐
2013/01/06
276
0
APP实现与原理

实现 不需要任何权限获得Android设备的唯一ID RecyclerView的通用适配器,和滚动时不加载图片的封装 完美的解决如何让AsyncTask终止操作 webview rexsee sdcard 缓存文件可以放在哪里?它们各...

addcn
2015/12/16
60
0

没有更多内容

加载失败,请刷新页面

加载更多

将博客搬至CSDN

https://blog.csdn.net/qq_38157006

Marhal
6分钟前
0
0
unicode Java中求字符串长度length()和codePointCount()的区别

在计算字符串长度时,Java的两种方法length()和codePointCount()一度让我困惑,运行书上例子得到的长度值是相等的,那为什么要设定两个方法呢? 对于普通字符串,这两种方法得到的值是一样的...

泉天下
7分钟前
0
0
uin-app 一、学习理由

选择uni-app 理由 别人的理由 1. 5+ 有HTML5+和Native.js技术,HTML5+包含常用的跨平台的几百个API,能满足常规开发需求,而Native.js把40w原生api映 射成js对象,这样js可以直接调原生。HTM...

轻轻的往前走
9分钟前
0
0
方括号及其在命令行中的不同用法介绍

通配 方括号最简单的用法就是通配。你可能在知道“ Globbing”这个概念之前就已经通过通配来匹配内容了,列出具有相同特征的多个文件就是一个很常见的场景,例如列出所有 JPEG 文件: ls *.j...

Linux就该这么学
14分钟前
0
0
vecty 基础

gopherjs 是把 go 编译为 js 的工具。 vecty 是基于 gopherjs 的一种类似 React 的开发框架。 安装 gopherjs 和 vecty go get -u github.com/gopherjs/gopherjsgo get -u github.com/gopher......

electricface
15分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部