存儲設備掛載和卸載監聽StorageReceiverHelper

一、監聽存儲設備掛載和卸載的幫助類:

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();

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章