Android SD卡挂载状态
一、 Sd卡挂载主要ACTION
ACTION_MEDIA_BAD_REMOVAL |
sd卡已经从sd卡插槽拔出,但是挂载点还没解除 |
ACTION_MEDIA_BUTTON |
“媒体”按钮被按下 |
ACTION_MEDIA_CHECKING |
存在外部媒体,磁盘检查挂载点的路径中包含的检查媒体意图 |
ACTION_MEDIA_EJECT |
用户移除外部存储媒体 |
ACTION_MEDIA_MOUNTED |
Sd卡被插入,且已经挂载 |
ACTION_MEDIA_NOFS |
外部媒体存在,而是使用一个不兼容的fs(或者是空白)挂载点的路径中包含的检查媒体意图 |
ACTION_MEDIA_REMOVED |
Sd卡被移除 |
ACTION_MEDIA_SCANNER_FINISHED |
扫描完成 |
ACTION_MEDIA_SCANNER_STARTED |
开始扫描 |
ACTION_MEDIA_SCANNER_SCAN_FILE |
请求媒体扫描仪扫描一个文件,并将它添加到媒体数据库 |
ACTION_MEDIA_SHARED |
Sd卡作为USB大容量存储被共享,挂载被解除 |
ACTION_MEDIA_UNMOUNTABLE |
|
ACTION_MEDIA_UNMOUNTED |
Sd卡存在,但还没有挂载 |
一、 热插拔sd卡
1. 直接拔掉sdcard
BroadcastReceiver.android.intent.action.MEDIA_UNMOUNTED
BroadcastReceiver.android.intent.action.MEDIA_BAD_REMOVAL
BroadcastReceiver.android.intent.action.MEDIA_EJECT
BroadcastReceiver.android.intent.action.MEDIA_SCANNER_STARTED
BroadcastReceiver.android.intent.action.MEDIA_SCANNER_FINISHED
2. 再次插入sd卡
BroadcastReceiver.android.intent.action.MEDIA_CHECKING
BroadcastReceiver.android.intent.action.MEDIA_MOUNTED
BroadcastReceiver.android.intent.action.MEDIA_SCANNER_STARTED
BroadcastReceiver.android.intent.action.MEDIA_SCANNER_FINISHED
3. 在通知栏卸载sdcard
BroadcastReceiver.android.intent.action.MEDIA_EJECT
BroadcastReceiver.android.intent.action.MEDIA_UNMOUNTED
注意:接收到 ACTION_MEDIA_EJECT 广播之后,sd 卡还是可以读写的,
直到接收到 ACTION_MEDIA_REMOVED、ACTION_MEDIA_UNMOUNTED等广播之后,sd 卡才不可以读写。
二、 Sd卡示例
1. 获取sd卡路径
public static String getSDPath(Context context) {
String sd = null;
StorageManager storageManager = (StorageManager) context
.getSystemService(Context.STORAGE_SERVICE);
StorageVolume[] volumes = storageManager.getVolumeList();
for (int i = 0; i < volumes.length; i++) {
if (volumes[i].isRemovable()&& volumes[i].allowMassStorage()
&& volumes[i].getDescription(context).contains("SD")) {
sd = volumes[i].getPath();
}
}
return sd;
}
2. 编写广播接收器
public void registerReceivers(){
if(mReceiver == null){
mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Log.i("usb", "BroadcastReceiver."+ intent.getAction());
String action = intent.getAction();
if(action.equals("android.intent.action.MEDIA_CHECKING")){
Toast.makeText(context, "sdcard MEDIA_CHECKING",0).show();
//updateListMounted();01-01 09:20:41.663: I/usb(14544):path:/storage/emulated/0
/*String path = getSDPath(context);
Log.i("liting","path = " + path);
MediaScannerConnection.scanFile(context,
newString[]{path + "/DICM"},
null,null);
updateListMounted();*/
ad.start();
loading_layout.setVisibility(View.VISIBLE);
list_layout.setVisibility(View.INVISIBLE);
loading_text.setVisibility(View.VISIBLE);
}else if(action.equals("android.intent.action.MEDIA_SCANNER_FINISHED")){
Toast.makeText(context, "sdcard MEDIA_SCANNER_FINISHED", 0).show();
if(ad.isRunning()){
ad.stop();
loading_layout.setVisibility(View.INVISIBLE);
list_layout.setVisibility(View.VISIBLE);
loading_text.setVisibility(View.INVISIBLE);
}
}else if(action.equals("android.intent.action.ACTION_MEDIA_UNMOUNTED")){
Toast.makeText(context, "sdcard ACTION_MEDIA_UNMOUNTED", 0).show();
if(ad.isRunning()){
ad.stop();
loading_layout.setVisibility(View.INVISIBLE);
}
}
}
};
final IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_MEDIA_BAD_REMOVAL);
filter.addAction(Intent.ACTION_MEDIA_BUTTON);
filter.addAction(Intent.ACTION_MEDIA_CHECKING);
filter.addAction(Intent.ACTION_MEDIA_EJECT);
filter.addAction(Intent.ACTION_MEDIA_MOUNTED);
filter.addAction(Intent.ACTION_MEDIA_NOFS);
filter.addAction(Intent.ACTION_MEDIA_REMOVED);
filter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);
filter.addAction(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
filter.addAction(Intent.ACTION_MEDIA_SCANNER_STARTED);
filter.addAction(Intent.ACTION_MEDIA_UNMOUNTABLE);
filter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
filter.addAction(Intent.ACTION_MEDIA_SHARED);
filter.addDataScheme("file");
registerReceiver(mReceiver, filter);
}
}
3. 注册/取消注册广播监听器
四、 媒体数据库刷新
1. 手动扫描刷新
当android的系统启动的时候,系统会自动扫描sdcard内的文件,并把获得的媒体文件信息保存在一个系统媒体数据库中,程序想要访问多媒体文件,就可以直接访问媒体数据库中即可,而用直接去sdcard中取。但是,如果系统在不重新启动情况下,媒体数据库信息是不会更新的,这里举个例子,当应用程序保存一张图片到本地后(已成功),但打开系统图片库查看时候,你会发现图片库内并没有你刚刚保存的那张图片,原因就在于系统媒体库没有及时更新,这时就需要手动刷新文件系统了。
2. 自动刷新
在后视镜的视频回放中,热插拔sd卡,当插上sd卡时,sd卡会扫描好久的数据库。通过log分析,在MEDIA_SCANNER_STARTED到MEDIA_SCANNER_FINISHED之间花费了太久的时间。如此提高系统扫描的速度呢?
\packages\providers\MediaProvider\src\com\android\providers\media\MediaScannerService.java
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND+
Process.THRE
AD_PRIORITY_LESS_FAVORABLE);将值降低
Android SD卡挂载状态相关推荐
- android sd卡挂载广播,Android--检测内置/外置SD卡存储卡,枚举所有挂载点(通过反射实现),监听SD卡广播...
直接上重点: 1:获取内置SD卡的路径, 但是判断是否有效(是否挂载), 需要用到下面检测挂载点的方法 /** * 获取内置SD卡路径 * * @return */ public String get ...
- android sd卡挂载命令,android - 从android中的adb shell手动挂载SD卡 - 堆栈内存溢出
我有一个Android 4.1手机(联想820). 经过一些旨在对内部SD ram进行分区的更改(更改后,手机将不再安装外部 SD卡.我很擅长Linux,但我从未见过Android shell. 我很 ...
- Android存储设备(U盘,SD卡)状态监测(《Android 2.3 SD卡挂载流程浅析1234567)
我们是以DV6300-T的平台来做测试的,发现有2种方式来检测android中external media(包括SD卡,USB)的状态. 一种是使用StorageListener监听,还有一种是使用广 ...
- android vold初始化及sd卡挂载流程(转载)
1 总体介绍 在Android 中,当SD卡插入系统之后,系统会自动挂载.Vold 就是负责挂载SD卡的,vold 的全称是volume daemon.实际上是负责完成系统的CDROM,USB 大容量 ...
- android sd 挂载流程_Android7.0 SD卡挂载流程
Android7.0 SD卡挂载流程 序言:这是7.0时候的总结,8.0MountService改名成了StorageManageService,懒得再重新总结,直接把7.0的总结贴上 这篇文章是对上 ...
- android sd卡无法挂载,内外SD卡无法挂载的BUG修复方法
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我们在对安卓ROM进行移植的时候,因为移植相对来说比较麻烦,经常会出现很多的问题,特别是常出现的一个问题,就是ROM移植之后无法挂载内外SD卡.接下来就来 ...
- Android 2.3 SD卡挂载流程浅析(三)
在前面两篇博文<Android 2.3 SD卡挂载流程浅析(一)><Android 2.3 SD卡挂载流程浅析(二)>中,主要简单介绍了SD卡的挂载流程以及所涉及的关键文件.在 ...
- Android7.0 SD卡挂载流程
Android7.0 SD卡挂载流程 序言:这是7.0时候的总结,8.0MountService改名成了StorageManageService,懒得再重新总结,直接把7.0的总结贴上 这篇文章是对上 ...
- android SD卡相关
另外文章 http://blog.csdn.net/Fybon/article/details/25904215 Android 外部存储权限分析 http://blog.csdn.net/zjb ...
最新文章
- 互联网协议 — TCP — 滑动窗口(网络质量保障)
- vim编辑器高级应用
- 如何学好Java?你应该躲开这几个坑
- boost::log模块实现格式化程序流的测试程序
- vue 父组建获取子组建方法为获得_Vue父子组件状态同步的最佳方式
- scala类型推断及库方法设计原则和==与java有何差别
- C++实现utf8和gbk编码字符串互相转换
- Linux学习笔记-增量编译(Makefile进一步使用)
- 使用vue完成一个分页效果
- 消息驱动式微服务:Spring Cloud Stream RabbitMQ
- 第九届蓝桥杯B组省赛。
- CC1310直接操作寄存器编程
- bulter机器人_机器人库早报|特拉华大学通过人工智能扩大发展劳动力 1.5 倍
- 微信支付的分账功能介绍
- Mac下解决硬盘无法读取问题Mounty for NTFS - 免费让 Mac 原生支持移动硬盘/U盘 NTFS 读写的必备驱动应用
- ConcurrentHashMap源码深度解析(一)(java8)——不可不知的基本概念(助你拿下源码事半功倍)
- c语言输入1到12月份,C语言高手请进下面是一个日历表,运行结果中能不能把1~12月份改 爱问知识人...
- 小白都能看懂的实战教程 手把手教你Python Web全栈开发(DAY 3)
- 2022年最流行的几款软件缺陷管理工具
- 天才少年!他们的内心世界你懂吗?道翰天琼认知智能机器人平台API接口为您揭秘-1。