当前位置: 首页 > news >正文

Android知识之SDCard

关于Environment.getExternalStorageState()的介绍

Environment.getExternalStorageState()是用来获取手机SDCard的状态。只有当SDCard挂载时,我们才可以进行写入和读取操作。SDCard状态以及读取关系如下表格:

SD状态现象描述|/mnt/sdcard目录是否存在|canRead返回|canWrite返回|在/mnt/sdcard创建文件|在/mnt/sdcard创建文件夹
:———————- |: ———————————–: | :—————–: |: ——————-: |: ——————————–: |: —
MEDIA_MOUNTED|SD卡正常挂载 |TRUE |TRUE |TRUE |TRUE |TRUE

MEDIA_REMOVED|无介质 |TRUE |FALSE |FALSE |false |FALSE

MEDIA_UNMOUNTED|有介质,未挂载,在系统中删除|TRUE|FALSE|FALSE|false|FALSE

MEDIA_BAD_REMOVAL|介质在挂载前被移除,直接取出SD卡|TRUE|FALSE|FALSE|false|
FALSE

MEDIA_CHECKING|正在磁盘检查,刚装上SD卡时|TRUE|FALSE|FALSE|false|FALSE

MEDIA_SHARED|SD卡存在但没有挂载,并且通过USB大容量存储共享,操作打开USB存储|TRUE|FALSE|FALSE|false: 原因Permission denied
|FALSE

MEDIA_MOUNTED_READ_ONLY|sd卡存在并且已挂载,但是挂载方式为只读|-|-|无法模拟,SD卡不允许修改权限

MEDIA_NOFS|介质存在但是为空白或用在不支持的文件系统|-|-|无法模拟,SD卡格式化后再加载会自动生成系统文件

MEDIA_UNMOUNTABLE |存在SD卡但是不能挂载,例如发生在介质损坏|-|-|无法模拟

通过上表可以看出,只有在SD卡状态为MEDIA_MOUNTED时/mnt/sdcard目录才是可读可写,并且可以创建目录及文件。
所以我们读取SD卡时一般会这么写:

        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {String root = Environment.getExternalStorageDirectory().getPath();}

读写SD卡记得加这两个权限:

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

但是在Android 4.4开始,上面的方法是获取内置SDCard的路径。Environment.isExternalStorageRemovable(),通过此方法我们可以知道手机上的存储卡是手机自带的还是外边可插拔的SD卡,当然此种情况是指只有一个卡的情况。
但是现在国内的大多数手机都支持双存储卡:
下面我总结了一些较常见的外部SD卡的路径:
/mnt/sdcard2 /mnt/sdcard-ext /mnt/ext_sdcard /mnt/sdcard/SD_CARD
/mnt/sdcard/extra_sd /mnt/extrasd_bind /mnt/sdcard/ext_sd
/mnt/sdcard/external_SD /storage/sdcard1 /storage/extSdCard
用这个方法getVolumePaths,通过反射机制得到路径,然后判断即可。

一些路径的标准写法
Environment.getDataDirectory() = /data
Environment.getDownloadCacheDirectory() = /cache
Environment.getExternalStorageDirectory() = /mnt/sdcard
Environment.getRootDirectory() = /system
context.getCacheDir() = /data/data/com.mt.mtpp/cache
context.getExternalCacheDir() = /mnt/sdcard/Android/data/com.mt.mtpp/cache
context.getFilesDir() = /data/data/com.mt.mtpp/files


增加内容:
写程序时,通常会听到各种不同的路径,比如:相对路径,绝对路径等. 对于 java 文件操作来说,一样有这些路径,在以前 没怎么注意到这个api: getCanonicalPath(), 其实这个东西很重要,因为这个api 是真正能拿到一个文件的唯一路径的api, 它的返回值一定是一个绝对路径.唯一指向一个文件.
当输入为绝对路径时,返回的都是绝对路径。
当输入为相对路径时:
getPath()返回的是File构造方法里的路径,是什么就是什么,不增不减
getAbsolutePath()返回的其实是user.dir+getPath()的内容,从上面返回的结果可以得出。
getCanonicalPath()返回的就是标准的将符号完全解析的路径

-------------------------------------
在此感谢http://m.blog.csdn.net/blog/shenqi_sh/9875349,http://www.cnblogs.com/mengdd/p/3742623.html 俩篇帖子的作者!!!本文并非原创,只是在下的一些笔记而已。


参考链接:
http://www.vogella.com/articles/Android/article.html#resources_android

http://www.coreservlets.com/android-tutorial/

http://www.xdnf.cn/news/843067.html

相关文章:

  • 大学生网页设计作业——11张精美网页 html+css+javascript+bootstarp
  • 运维管理一体化:构建多维一体化的运维体系
  • 10大Web漏洞扫描工具
  • CONFIG.SYS文件详解
  • HTML网页设计结课作业——11张精美网页 html+css+javascript+bootstarp
  • 11招秘籍,用Python下载文件!
  • 向日葵下载网址
  • 算法导论习题(持续更新)
  • 保险需求的智能分析:智能保顾——互联网平台建设...
  • 何谓B/S架构,C/S架构,SOA架构?
  • 高级PHP应用程序漏洞审核技术-温故知新
  • “卓越级”!火山引擎边缘云持续推动行业标准与生态建设,获多项权威认可
  • Cajviewer 7.0.2 Windows 7下使用方法:
  • Java程序员必看电影:Java 4-ever
  • 贺建奎出狱7个月:新实验室落户北京大兴,从事罕见遗传病基因治疗
  • Web安全:AppScan 安装和使用.(渗透常用工具)
  • 【C语言】贪吃蛇【附源码】
  • 游戏环境下如何实现真正D3D的窗口
  • 如何用普通的搜索引擎查找论坛里的帖子
  • java智慧工地云平台源码,基于BIM+AI智能大数据中心和云平台的智慧工地监管平台
  • maya批量命名插件_教你玩转MAYA的四十二精华造诣(第一期)
  • 如何在web页面下做自动化测试?
  • 高防IP可以防御CC攻击吗?高防IP有什么优势?
  • 系留无人机+通信中继:机载自组网技术实现详解
  • Source Insight 3.5 序列号分享
  • 算法的基本特征
  • Java与Unicode
  • 南邮《网络技术与应用》4次作业,赶紧学习一下
  • Docker 笔记
  • JAVA程序模拟器安装及使用详细教程