文档章节

Android获取手机自带SDCard和外置SDCard路径

yuewawa
 yuewawa
发布于 2016/02/27 11:36
字数 458
阅读 41
收藏 0
点赞 1
评论 0

获取内置SD卡很简单,就一行代码

    /**
     * 获取内置SD卡路径
     * @return
     */
    public String getInnerSDCardPath() {  
        return Environment.getExternalStorageDirectory().getPath();  
    }

获取外置SD卡比较麻烦,

/**
     * 获取外置SD卡路径
     * @return
     */
public List<String> getExtSDCardPaths() {
    	         List<String> paths = new ArrayList<String>();
    	         String extFileStatus = Environment.getExternalStorageState();
    	         File extFile = Environment.getExternalStorageDirectory();
    	         if (extFileStatus.endsWith(Environment.MEDIA_UNMOUNTED)
    	                 && extFile.exists() && extFile.isDirectory()
    	                 && extFile.canWrite()) {
    	             paths.add(extFile.getAbsolutePath());
    	         }
    	         try {
    	             // obtain executed result of command line code of 'mount', to judge
    	             // whether tfCard exists by the result
    	             Runtime runtime = Runtime.getRuntime();
    	             Process process = runtime.exec("mount");
    	             InputStream is = process.getInputStream();
    	            InputStreamReader isr = new InputStreamReader(is);
    	             BufferedReader br = new BufferedReader(isr);
    	             String line = null;
    	             int mountPathIndex = 1;
    	             while ((line = br.readLine()) != null) {
    	                 if ((!line.contains("fat") && !line.contains("fuse") && !line
    	                         .contains("storage"))
    	                         || line.contains("secure")
    	                         || line.contains("asec")
    	                         || line.contains("firmware")
    	                         || line.contains("shell")
    	                         || line.contains("obb")
    	                         || line.contains("legacy") || line.contains("data")) {
    	                     continue;
    	                 }
    	                 String[] parts = line.split(" ");
    	                 int length = parts.length;
    	                if (mountPathIndex >= length) {
    	                     continue;
    	                 }
    	                 String mountPath = parts[mountPathIndex];
    	                 if (!mountPath.contains("/") || mountPath.contains("data")
    	                         || mountPath.contains("Data")) {
    	                     continue;
    	                 }
    	                 File mountRoot = new File(mountPath);
    	                 if (!mountRoot.exists() || !mountRoot.isDirectory()
    	                         || !mountRoot.canWrite()) {
    	                    continue;
    	                 }
    	                 boolean equalsToPrimarySD = mountPath.equals(extFile
    	                         .getAbsolutePath());
    	                 if (equalsToPrimarySD) {
    	                     continue;
    	                 }
    	                 paths.add(mountPath);
    	             }
    	         } catch (IOException e) {
    	             // TODO Auto-generated catch block
    	             e.printStackTrace();
    	         }
    	         return paths;
    	     }

首先获取了Android标准一部分的外置SD卡,如果它可用的话。

然后利用运行时,通过命令行函数"mount"来获取所有的存储位置,并对返回的结果进行SD卡或者TF卡的查找。

最后返回了所有可用于存储的不同的卡的位置,用一个List来保存。由于不是所有的手机都支持TF卡,因而这个List包含的路径未必很多,只有一个SD卡的手机只会返回一个路径,多个可用存储位置的会返回多个路径。

但有一点,是必须的,paths.get(0)肯定是外置SD卡的位置,因为它是primary external storage.

© 著作权归作者所有

共有 人打赏支持
yuewawa
粉丝 4
博文 95
码字总数 16049
作品 0
南京
Android手机自带内部存储路径的获取

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

Cundong ⋅ 2014/07/08 ⋅ 3

如何区分手机内置存储卡与外置存储卡

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

wanyang ⋅ 2014/01/07 ⋅ 0

Android--adb快速使用技巧

前言: 首先,我们来了解下adb是什么。 adb工具即Android Debug Bridge(安卓调试桥) tools。它就是一个命令行窗口,用于通过电脑端与模拟器或者真是设备交互。在某些特殊的情况下进入不了系...

DP文剑平 ⋅ 05/22 ⋅ 0

android数据存储与访问之使用SD卡

使用Activity的openFileOutput()方法保存文件,文件是存放在手机空间上,一般手机的存储空间不是很大,存放些小文件还行,如果要存放像视频这样的大文件,是不可行的。对于像视频这样的大文件...

长平狐 ⋅ 2012/09/03 ⋅ 0

Android文件的读写

Android的文件读写与JavaSE的文件读写相同,都是使用IO流。而且Android使用的正是JavaSE的IO流,下面我们通过一个练习来学习Android的文件读写。 1.创建一个Android工程 Project name:File ...

迷途d书童 ⋅ 2012/03/30 ⋅ 0

android应用把文件存放在SDCard

1、在程序中访问SDCard,你需要申请访问SDCard的权限 在AndroidManifest.xml中加入访问SDCard的权限如下: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schem......

罗荣熙 ⋅ 2012/11/08 ⋅ 0

APP实现与原理

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

addcn ⋅ 2015/12/16 ⋅ 0

关于外置SDCARD权限问题

今天应用层的说是apk无法在外置SDCARD写数据,豌豆荚也创建不了,我仔细在adb下看了SDCARD的权限,如图: 我要说的是EXTSD(sdcard是系统从nand分配的内存),拥有者是SYStem,mediarw为用户组,...

wangjian19 ⋅ 2014/01/13 ⋅ 0

Android 外部存储权限分析

不知道你有么有发现,来自菜鸟的成长史:http://blog.csdn.net/zjbpku/article/details/25161131, KitKat之后的版本不再支持用户对外置SDcard(Secondary Storage)的写入等操作。如果用户想要...

sflfqx ⋅ 2015/02/09 ⋅ 0

我的三星手机内置SD卡开机无法自动加载

我一直用的一个三星手机,采用原厂的ROM就没有问题,一旦刷成比较新的4.2版本,就会出现(经常性的)内置SD卡无法自动加载的问题。这是一个很讨厌的问题,因为一旦内置的SD卡无法加载,很多应...

小穷博士 ⋅ 2013/10/26 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

一篇文章学懂Shell脚本

Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合。 Shell可以直接使用在win/Unix/Linux上面,并且可以调用...

Jake_xun ⋅ 25分钟前 ⋅ 0

大数据工程师需要精通算法吗,要达到一个什么程度呢?

机器学习是人工智能的一个重要分支,而机器学习下最重要的就是算法,本文讲述归纳了入门级的几个机器学习算法,加大数据学习群:716581014一起加入AI技术大本营。 1、监督学习算法 这个算法由...

董黎明 ⋅ 58分钟前 ⋅ 0

Kylin 对维度表的的要求

1.要具有数据一致性,主键值必须是唯一的;Kylin 会进行检查,如果有两行的主键值相同则会报错。 2.维度表越小越好,因为 Kylin 会将维度表加载到内存中供查询;过大的表不适合作为维度表,默...

无精疯 ⋅ 今天 ⋅ 0

58到家数据库30条军规解读

军规适用场景:并发量大、数据量大的互联网业务 军规:介绍内容 解读:讲解原因,解读比军规更重要 一、基础规范 (1)必须使用InnoDB存储引擎 解读:支持事务、行级锁、并发性能更好、CPU及...

kim_o ⋅ 今天 ⋅ 0

代码注释中顺序更改 文件读写换行

`package ssh; import com.xxx.common.log.LogFactory; import com.xxx.common.log.LoggerUtil; import org.apache.commons.lang3.StringUtils; import java.io.*; public class DirErgodic ......

林伟琨 ⋅ 今天 ⋅ 0

linux实用操作命令

参考 http://blog.csdn.net/qwe6112071/article/details/50806734 ls [选项] [目录名 | 列出相关目录下的所有目录和文件 -a 列出包括.a开头的隐藏文件的所有文件-A 同-a,但不列出"."和"...

简心 ⋅ 今天 ⋅ 0

preg_match处理中文符号 url编码方法

之前想过直接用符号来替换,但失败了,或者用其他方式,但有有些复杂,这个是一个新的思路,亲测可用 <?php$str='637朗逸·超速新风王(300)(白光)'; $str=iconv("UTF-8","GBK",$s...

大灰狼wow ⋅ 今天 ⋅ 0

DevOps 资讯 | PostgreSQL 的时代到来了吗 ?

PostgreSQL是对象-关系型数据库,BSD 许可证。拼读为"post-gress-Q-L"。 作者: Tony Baer 原文: Has the time finally come for PostgreSQL?(有删节) 近30年来 PostgreSQL 无疑是您从未听...

RiboseYim ⋅ 今天 ⋅ 0

github太慢

1:用浏览器访问 IPAddress.com or http://tool.chinaz.com 使用 IP Lookup 工具获得github.com和github.global.ssl.fastly.net域名的ip地址 2:/etc/hosts文件中添加如下格式(IP最好自己查一...

whoisliang ⋅ 今天 ⋅ 0

非阻塞同步之 CAS

为解决线程安全问题,互斥同步相当于以时间换空间。多线程情况下,只有一个线程可以访问同步代码。这种同步也叫阻塞同步(Blocking Synchronization). 这种同步属于一种悲观并发策略。认为只...

长安一梦 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部