Android 检测SD卡状态

  1. if (Environment.getExternalStorageState().equals(
    Environment.MEDIA_MOUNTED)) {
    // sd card 可用
    }else {
    // 当前不可用
    }

    Environment.MEDIA_MOUNTED // sd卡在手机上正常使用状态 

Environment.MEDIA_UNMOUNTED // 用户手工到手机设置中卸载sd卡之后的状态 
Environment.MEDIA_REMOVED // 用户手动卸载,然后将sd卡从手机取出之后的状态 
Environment.MEDIA_BAD_REMOVAL // 用户未到手机设置中手动卸载sd卡,直接拨出之后的状态 
Environment.MEDIA_SHARED // 手机直接连接到电脑作为u盘使用之后的状态 
Environment.MEDIA_CHECKINGS // 手机正在扫描sd卡过程中的状态 

在做android开发对sd操作时,最好是sd卡处于Environment.MEDIA_MOUNTED状态时,对sd卡上的文件进行操作,其他状态不宜进行操作。 

对SD卡状态监听,到现在为止我知道的有两种方式: 
1.注册StorageEventListener来监听sd卡状态 
StorageEventListener中有onStorageStateChanged()方法,当sd卡状态改变时,此方法会调用,对各状态的判断一般会用到Environment类,此类中包含的有关sd卡状态的常量有:
MEDIA_BAD_REMOVAL:表明SDCard 被卸载前己被移除 
MEDIA_CHECKING:表明对象正在磁盘检查 
MEDIA_MOUNTED:表明sd对象是存在并具有读/写权限 
MEDIA_MOUNTED_READ_ONLY:表明对象权限为只读 
MEDIA_NOFS:表明对象为空白或正在使用不受支持的文件系统 
MEDIA_REMOVED:如果不存在 SDCard 返回 
MEDIA_SHARED:如果 SDCard 未安装 ,并通过 USB 大容量存储共享 返回 
MEDIA_UNMOUNTABLE:返回 SDCard 不可被安装 如果 SDCard 是存在但不可以被安装 
MEDIA_UNMOUNTED:返回 SDCard 已卸掉如果 SDCard 是存在但是没有被安装 
如: 

  1. public void onStorageStateChanged(String path, String oldState, String newState) {
    if (newState.equals(Environment.MEDIA_SHARED)) {
    //大容量存储时相关操作
    } else if (newState.equals(Environment.MEDIA_CHECKING)) {
    //检查sd卡时操作
    } else if (newState.equals(Environment.MEDIA_MOUNTED)) {
    //sd在手机上可用时操作
    }...
    }

StorageEventListener中还有onUsbMassStorageConnectionChanged()用来监听大容量存储是否连接,我对这个方法不太了解,原来以为用来监听usb线是否拔出的,可实际在linux上好像没什么问题,但在windows上却无法用来监听usb拔出状态,也不知道是驱动有问题还是我用错了,期待高手解答。

2.通过接收Intent来监听sd卡状态 
sd卡状态改变时,MountServices会发送Intent,可以通过接收Intent来得到sd卡状态,Intent中关于sd卡状态的action有: 
MEDIA_BAD_REMOVAL_ACTION:sd卡已经从sd卡插槽拔出,但是挂载点还没解除 
MEDIA_EJECT_ACTION:用户想要移除sd卡 
MEDIA_MOUNTED_ACTION:sd卡被插入,且已经挂载 
MEDIA_REMOVED_ACTION:sd卡被移除 
MEDIA_SHARED_ACTION:sd卡作为 USB 大容量存储被共享,挂载被解除 
MEDIA_UNMOUNTED_ACTION:sd卡存在,但还没有挂载 
MEDIA_SCANNER_STARTED_ACTION:开始扫描 

MEDIA_SCANNER_FINISHED_ACTION:扫描完成 

如果只是获取当前sd卡状态,不需要对其监听,可以用方法Environment.getExternalStorageState()获得当前sd卡状态

时间: 2025-01-27 08:26:09

Android 检测SD卡状态的相关文章

Android 检测SD卡应用

Android 检测SD卡应用 //                                    Environment.MEDIA_MOUNTED // sd卡在手机上正常使用状态  // Environment.MEDIA_UNMOUNTED // 用户手工到手机设置中卸载sd卡之后的状态  // Environment.MEDIA_REMOVED // 用户手动卸载,然后将sd卡从手机取出之后的状态  // Environment.MEDIA_BAD_REMOVAL // 用户未

Android编程之判断SD卡状态的方法_Android

本文实例讲述了Android编程之判断SD卡状态的方法.分享给大家供大家参考,具体如下: 首先我们要在AndroidManifest.xml中增加SD卡访问权限: <!-- 在SDCard 的挂载权限 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <!-- 往SDCard写入数据权限 --> <uses-permission

Android获取监听SD卡状态

项目简介: 该项目监听SD卡状态 详细介绍: 部署该应用后,当SD卡状态发送改变时,系统会发出吐司通知用户 该应用涉及到的知识有: 1.Android的四大组件之一:广播接收者的使用 2.SD卡状态的广播 注意: 1.只有在 2.x 模拟器上才能对SD卡进行操作,所以该应用应当部署在 2.x 的模拟器上 2.一个广播接收者是可以接受多个广播的,直接添加多个action就可以了 3.SD卡不同的状态有不同的广播,主要有三种: <action android:name="android.int

Android开发中使用外部应用获取SD卡状态的方法

本文实例讲述了Android开发中使用外部应用获取SD卡状态的方法.分享给大家供大家参考,具体如下: 先来看看常规获取SD卡状态的方法 if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { // sd card 可用 }else { // 当前不可用 } Environment.MEDIA_MOUNTED // sd卡在手机上正常使用状态 Environment.MEDIA_UNMOUNTE

java-检测Android的SD卡中的文件

问题描述 检测Android的SD卡中的文件 开发了一个变声器应用,需要检测一些添加都sd卡中的pcm文件.歌曲的保存格式是:名字.pcm File f = new File(filepath + "/" + dir.getName() , SelectedFileOfListView + ".pcm"); f.delete(); 其中SelectedFileOfListView是选择文件的名称,其余的是列出目录中的文件. dir = new File(filepa

android 向SD卡写入数据

原文:android 向SD卡写入数据 1.代码: /** * 向sdcard中写入文件 * @param filename 文件名 * @param content 文件内容 */ public void saveToSDCard(String filename,String content) throws Exception{ File file=new File("/mnt/sdcard", filename); OutputStream out=new FileOutputSt

Android判断SD卡是否已经挂载的方法_Android

本文实例讲述了Android判断SD卡是否已经挂载的方法.分享给大家供大家参考.具体如下: 提供一个监听方法BroadcastReceiver 设置IntentFilter为: Intent.ACTION_MEDIA_MOUNTED Intent.ACTION_MEDIA_EJECT Intent.ACTION_MEDIA_REMOVED  然后再public void onReceive(Context context, Intent intent) 中实现你的启动逻辑startActivit

Android获取SD卡路径及SDCard内存的方法

本文实例讲述了Android获取SD卡路径及SDCard内存的方法.分享给大家供大家参考.具体分析如下: 昨天在研究拍照后突破的存储路径的问题,开始存储路径写死为: private String folder = "/sdcard/DCIM/Camera/"(SD卡上拍照程序的图片存储路径); 后来发现这样写虽然一般不会出错,但不是很好,因为不同相机,可能路径会出问题.较好的方法是通过Environment 来获取路径,最后给出一个例子,教你怎样获取SDCard 的内存,显示出来告诉用

Android获取SD卡上图片和视频的缩略图

  需要快速提取图片和视频缩略图可以直接访问 android.provider.MediaStore.Images.Thumbnails 和android.provider.MediaStore.Video.Thumbnails这两个数据库,即可查询出来缩略图 . 如何判断文件呢? 可以通过Cursor遍历数据库,对比INTERNAL_CONTENT_URI字段的值,这是一个Uri,这里保存着Android手机SD卡上的多媒体文件完整路径. Uri originalUri = MediaStor