一、監聽存儲設備掛載和卸載的幫助類:
package com.dway.receiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.text.TextUtils;
/**
* 存儲設備掛載和卸載監聽
*/
public class StorageReceiverHelper {
private Context mContext;
private InnerReceiver mReceiver;
public StorageReceiverHelper(Context context){
mContext = context;
mReceiver = new InnerReceiver();
}
public void register() {
IntentFilter filter = new IntentFilter();
//注意需要添加scheme才能監聽到
filter.addDataScheme("file");
filter.addAction(Intent.ACTION_MEDIA_MOUNTED);
filter.addAction(Intent.ACTION_MEDIA_EJECT);
mContext.registerReceiver(mReceiver, filter);
}
public void setOnTimeListener(OnMediaChangeListener listener){
if(mReceiver != null){
mReceiver.setListener(listener);
}
}
public void unregister() {
if(mContext != null && mReceiver != null){
mContext.unregisterReceiver(mReceiver);
mReceiver = null;
}
}
private class InnerReceiver extends BroadcastReceiver {
private OnMediaChangeListener mListener;
@Override
public void onReceive(Context context, Intent intent) {
if(intent != null) {
String action = intent.getAction();
if(!TextUtils.isEmpty(action)){
if(action.equals(Intent.ACTION_MEDIA_MOUNTED)) {
if(mListener != null){
mListener.onMounted();
}
}else if(action.equals(Intent.ACTION_MEDIA_EJECT)){
if(mListener != null){
mListener.onEject();
}
}
}
}
}
public void setListener(OnMediaChangeListener listener) {
mListener = listener;
}
}
/**
* 監聽器
*/
public interface OnMediaChangeListener {
/** 掛載 */
void onMounted();
/** 卸載 */
void onEject();
}
}
注意,此廣播的Intent爲隱式,如果監聽不到廣播,則有可能是漏寫了filter.addDataScheme("file");這句話,因爲發出的廣播URI爲file:///mnt/sdcard ,需要設置scheme模式才能匹配到廣播從而監聽到。
上述說的是動態註冊,如果是xml中靜態註冊的話,則需要添加<data android:scheme="file"/> 。
二、使用方式:
1、註冊監聽:
StorageReceiverHelper mStorageReceiverHelper = new StorageReceiverHelper(getContext());
//監聽
mStorageReceiverHelper.setOnTimeListener(new StorageReceiverHelper.OnMediaChangeListener(){
@Override
public void onMounted() {
//存儲設備掛載
}
@Override
public void onEject() {
//存儲設備卸載
}
});
//註冊監聽
mStorageReceiverHelper.register();
2、註銷監聽:
//註銷監聽
mStorageReceiverHelper.unregister();