android.os.Environment 个人简单理解

Environment类:提供访问环境变量.

Android中常用Environment.getExternalStorageState来获取SD卡的状态

SD状态
现象描述

/mnt/sdcard目录是否存在

canRead返回

canWrite返回

在/mnt/sdcard创建文件

在/mnt/sdcard创建文件夹
 
MEDIA_MOUNTED


SD卡正常挂载

TRUE

TRUE

TRUE

TRUE

TRUE
 
MEDIA_REMOVED


无介质

TRUE

FALSE

FALSE

false:  原因Permission denied

FALSE
 
MEDIA_UNMOUNTED


有介质,未挂载,在系统中删除

TRUE

FALSE

FALSE

false:  原因Permission denied

FALSE
 
MEDIA_BAD_REMOVAL


介质在挂载前被移除,直接取出SD卡

TRUE

FALSE

FALSE

false:  原因Permission denied

FALSE
 
MEDIA_CHECKING


正在磁盘检查,刚装上SD卡时

TRUE

FALSE

FALSE

false:  原因Permission denied

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卡时一般会这么写:

 

01

02

03

04

05

06

String state;

String path;

state = Environment.getExternalStorageState();

if(state.equals(Environment.MEDIA_MOUNTED)){

path = Environment.getExternalStorageDirectory().getAbsolutePath();

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


01

02


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

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

1 在AndroidManifest文件中加入sdcard操作权限   

* <!--在SDCard中创建与删除文件权限 -->   

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

* <!--往SDCard写入数据权限 -->    

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

* 2 确认sdcard的存在   

* android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)

* 3 获取扩展存储设备的文件目录   

* android.os.Environment.getExternalStorageDirectory();

时间: 2024-10-23 22:54:21

android.os.Environment 个人简单理解的相关文章

[Android学习笔记]Context简单理解

一.Context是什么?上下文对象,可以理解为一个程序的运行的环境,从中可以获取当前程序的资源:getResources,getAssets 二.常见的Context有哪些?Application ContextActivity ContextService Context当创建一个Application , Activity, Service 的时候,都会对应创建一个属于他们的Context对象虽然同一个应用中的不同Context获取到的资源是同一套,环境是同一个,但是他们的生命周期不一致,

Android SD卡读取简单操作

package com.example.sdcardtest; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.io.RandomAccessFile; i

Android中观察者模式的升入理解

以前对Java中的观察者模式只知道一点皮毛,在接触Android的过程中,逐渐认识到观察者模式是如此的重要,android中许多地方都用到了观察者模式例如ContentResolver操作,来总结一下android中观察者模式的使用技巧 我所理解的观察者模式是这样子的:: 以一个例子来说明: 在service中有一个int类型的数据i,我在service中启动一个定时器去不断更新这个值,当我在activity中启动这个服务一次之后,每当i变化的时候我的activity要自动的同步更新这个值来显示

用c#开发安卓程序 (xamarin.android)系列之二 简单的聊天程序

networkcomm.net 网络通信框架来自于英国剑桥,其开源版本2.3.1 中自带了一个编写android的例子,可以很好的帮助我们入门. 此示例的功能,是在2个安卓手机上,输入对方的IP和端口,能够实现聊天功能. 把代码放上,供大家一览 using System; using Android.App; using Android.Content; using Android.Runtime; using Android.Views; using Android.Widget; using

android之android.os.NetworkOnMainThreadException异常

使用android测试访问web服务器的webservice时,在MainActivity的主线程中访问webservice,代码如下: package com.example.myandroidpro; import java.io.File; import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapSerializationE

Android中Environment与StatFs获取系统/SDCard存储空间大小

近期想起Android开发的知识.好久没有使用了,都忘得几乎相同了,今天查看了一会资料往回捡捡,顺便写下来帮助一下须要的同学. 首先讲述一下Environment与StatFs这两个类,然后介绍它们的具体用法. 1. Environment 类: Environment 是一个提供訪问环境变量的类. Environment 包括常量: MEDIA_BAD_REMOVAL 解释:返回getExternalStorageState() ,表明SDCard 被卸载前己被移除 MEDIA_CHECKIN

Android ndk 加载简单的gif 图像

首先获取一个安卓权限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission> 创建一个GifInfoHand

Android性能优化的一些理解

前言 Android性能优化对Android程序的维护和拓展是有很大帮助的,我们知道Android手机不管是内存还是CPU都无法同PC相比,这也就意味着我们必须要谨慎的去使用内存和CPU资源.因为稍稍不注意可能就会引发诸如OOM.ANR.内存泄漏等问题,所以熟悉Android性能优化的几个方法可以有效地提高应用程序的性能,我们可能都能说出一些性能优化的方法,比如布局优化.绘制优化.线程优化等等,但是可能我们会忽视某些小细节,比如布局优化我们可能都知道可以使用< include >来减少布局的层

Android深入源码分析理解Aidl整体调用流程(雷惊风)

2017年开始上班的第一天,老不想工作了,假期感觉还没开始就已经结束了,唉,时间就是这样,新的一年开始了,虽然很不想干正事,没办法,必须干起来,因为后边的路还很长,距离六十岁还很远.刚上班也没什么事,复习一下之前的东西,看了一下Aidl相关的知识,仔细瞅了瞅Aidl的调用流程,这里写篇文章整理一下,帮助大家的同时,自己也加深一下印象.对Aidl不太了解的童鞋可以先看一下我之前的一篇文章, 链接如下:http://blog.csdn.net/liuyonglei1314/article/detai