package cm.android.sdk.content; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; /** * sdcard监听类 */ public class SdcardManager { private static final Logger logger = LoggerFactory.getLogger(SdcardManager.class); private class ExternalStorageReceiver extends BaseBroadcastReceiver { @Override public IntentFilter createIntentFilter() { IntentFilter intentFilter = super.createIntentFilter(); intentFilter.addAction(Intent.ACTION_MEDIA_MOUNTED);//sd卡被插入,且已经挂载 intentFilter.addAction(Intent.ACTION_MEDIA_REMOVED);//sd卡被移除 intentFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);//sd卡存在,但还没有挂载 intentFilter.addAction(Intent.ACTION_MEDIA_BAD_REMOVAL);//sd卡已经从sd卡插槽拔出,但是挂载点还没解除 intentFilter.addAction(Intent.ACTION_MEDIA_SHARED);//sd卡作为USB大容量存储被共享,挂载被解除 intentFilter.addAction(Intent.ACTION_MEDIA_EJECT);//物理的拔出 SDCARD intentFilter.setPriority(1000); intentFilter.addDataScheme("file"); // 必须要有此行,否则无法收到广播 return intentFilter; } @Override public void onReceive(Context context, Intent intent) { logger.info("intent = " + intent); String action = intent.getAction(); if (Intent.ACTION_MEDIA_MOUNTED.equals(action)) { // SD卡成功挂载 listener.onMounted(); } else if (Intent.ACTION_MEDIA_UNMOUNTED.equals(action)) { // SD卡挂载失败 listener.onUnmounted(); } } } /** * sdcard监听接口 */ public static interface ExternalStorageListener { /** * sdcard已挂载 */ void onMounted(); /** * sdcard已被移除 */ void onUnmounted(); } private ExternalStorageReceiver receiver = new ExternalStorageReceiver(); private Context context; private ExternalStorageListener listener; /** * 初始化 */ public void init(Context context, ExternalStorageListener listener) { this.context = context; this.listener = listener; receiver.register(this.context); } /** * 释放资源 */ public void deInit() { receiver.unregister(context); this.listener = null; this.context = null; } }