一、 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 卡才不可以读写。
三、广播注册代码片段
// 注册广播
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_MEDIA_EJECT); // 用户移除外部存储媒体
intentFilter.addAction(Intent.ACTION_MEDIA_REMOVED); // Sd卡被移除
intentFilter.addAction(Intent.ACTION_MEDIA_MOUNTED);// Sd卡被插入,且已经挂载
intentFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);// Sd卡存在,但还没有挂载
intentFilter.addAction(Intent.ACTION_MEDIA_CHECKING);// 存在外部媒体,磁盘检查挂载点的路径中包含的检查媒体意图
intentFilter.addAction(Intent.ACTION_MEDIA_NOFS);// 外部媒体存在,而是使用一个不兼容的fs(或者是空白)挂载点的路径中包含的检查媒体意图
intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_STARTED);// 开始扫描
intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);// 请求媒体扫描仪扫描一个文件,并将它添加到媒体数据库
intentFilter.addAction(Intent.ACTION_MEDIA_SHARED);// Sd卡作为USB大容量存储被共享,挂载被解除
intentFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTABLE);
intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);// 扫描完成
intentFilter.addAction(Intent.ACTION_MEDIA_BAD_REMOVAL);// sd卡已经从sd卡插槽拔出,但是挂载点还没解除
intentFilter.addDataScheme("file");
registerReceiver(sdBroadcast, intentFilter);
本文大部分摘于《Android SD卡挂载状态》,感谢源作者分享。