• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > android 关于4.0之后不能直接获取SD卡外部存储路径的问题,androidsd

android 关于4.0之后不能直接获取SD卡外部存储路径的问题,androidsd

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android获取sd卡路径,android sd卡路径,android 外置sd卡路径,android 内置sd卡路径,android 获得sd卡路径等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

android 关于4.0之后不能直接获取SD卡外部存储路径的问题,androidsd


Environment.getExternalStorageDirectory()是Android 2.x时代的产物,那时Android主流设备只有很小的内置存储器,然后都会外置一张sd卡,那时这个方法返回的就是外置sd卡的根路径。

但随着Android进入4.x时代,大部分Android设备都已经内置一个较大存储卡,甚至不提供外置存储卡插槽了,此时Environment.getExternalStorageDirectory()返回的路径其实是由内置存储卡虚拟出来的一个目录,用户在这一目录下有全部权限。

按理说Android应该继续提供其他的方法来返回其他的外置存储卡的路径,但这一次Android却没有,因为Android系统开发者们发现之前直接允许程序任意访问sd卡的做法导致sd卡上垃圾文件的不可管理性,尤其在程序被卸载后,由于不知道那些文件是由这一程序创建的,所以无法关联删除,因此Android 4.0并不给程序开发者提供外置存储卡的路径,而是提供了诸如getExternalFilesDirs()和getExternalCacheDirs()这样的方法,直接给开发者提供一个限制内的存储文件的空间,这个空间是与程序关联的,因此在卸载程序时这两个目录下的文件也会被关联删除。

闲话到此,主要是为了说明Android 4.0之后,系统不希望开发者直接访问sd卡,所以也没有提供查询多sd卡路径的方法(在2.x和3.x时代末期我们都以为4.0会提供这样的查询接口)。

但是,Android系统不提供并不意味着就没有办法了,Android说到底还是Linux系统,因此外置sd卡必然是按照Linux的挂载方式挂载到系统中的。因此目前比较主流的方法就是绕过Android直接去读取Linux底层的挂载文件来找到系统中挂载的外置存储器。

参考代码:(这个代码是从网上找的,跟我之前写的思路差不多,参考这个改改吧,其实不用这么复杂,返回一个Set或者List把所有路径都返回就好了)

  1.    /** 
  2.      * 获取外置SD卡路径 
  3.      * @return  应该就一条记录或空 
  4.      */  
  5.     public List<String> getExtSDCardPath()  
  6.     {  
  7.         List<String> lResult = new ArrayList<String>();  
  8.         try {  
  9.             Runtime rt = Runtime.getRuntime();  
  10.             Process proc = rt.exec("mount");  
  11.             InputStream is = proc.getInputStream();  
  12.             InputStreamReader isr = new InputStreamReader(is);  
  13.             BufferedReader br = new BufferedReader(isr);  
  14.             String line;  
  15.             while ((line = br.readLine()) != null) {  
  16.                 if (line.contains("extSdCard"))  
  17.                 {  
  18.                     String [] arr = line.split(" ");  
  19.                     String path = arr[1];  
  20.                     File file = new File(path);  
  21.                     if (file.isDirectory())  
  22.                     {  
  23.                         lResult.add(path);  
  24.                     }  
  25.                 }  
  26.             }  
  27.             isr.close();  
  28.         } catch (Exception e) {  
  29.         }  
  30.         return lResult;  
  31.     }  

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • android 关于4.0之后不能直接获取SD卡外部存储路径的问题,androidsd
  • Android之获取数据库路径,android获取数据库
  • Android--向SD卡读写数据

相关文章

  • 2017-11-15TODO的使用以及自定义
  • 2017-05-26文件处理工具类,通用包文件处理工具
  • 2017-05-26安卓开源项目周报1227,安卓开源项目1227
  • 2017-05-26Android开发7:简单的数据存储(使用SharedPreferences)和文件操作,
  • 2017-05-26Hello,Android
  • 2017-05-26百度地图开发的学习(二)——地图定位,百度地图
  • 2017-05-26Android Studio中使用AIDL进行进程间通信
  • 2017-05-26关于TabLayout的使用 ,自定义了一个框架。。。 以后写底部菜单就可以直接作为依赖库 ,不用麻烦了,tablayout框架
  • 2017-05-227.2.1 Android XML数据解析
  • 2017-05-26首页3--界面上拉下拉的回弹效果,3--拉下

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android 几种消息推送方案总结,android方案
    • android:Activity数据传递之静态变量
    • UI篇(初识君面),ui初识君面
    • android手机登录时遇到“QQ安全登录发现病毒”解决,android手机
    • Android--Activity四种启动模式
    • Android百度地图API集成一《基础地图》,集成百度地图api
    • 我的android学习经历2,android学习经历2
    • Shell 下求两个文件交集、并集和差集的办法
    • Android中&quot;get&quot;,&quot;post&quot;请求的其中三种常用数据提交方式,android常用数据
    • git版本控制工具(二)----本地版本库的常用操作,git----

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有