文章

[摘]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 卡才不可以读写。

三、广播注册代码片段

		// 注册广播
		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卡挂载状态》,感谢源作者分享。

发表评论