Android 自定義動態註冊Broadcast框架

前言

在Android日常開發過程,經常會遇到需要寫動態註冊廣播接收器的時候,其實這部分代碼可以以設計的思想抽離出一個框架方便自己日後使用。

實現部分如下:

首先定義回調接口:

public interface WatcherInnerListener {
    public void onListenOccor();
}

定義Wather 接口:

public interface Watcher {
    public void startWatcher();
    public void stopWatcher();
}



定義抽象類實現Wather接口:

public abstract class AbstractWatcher implements Watcher {
    static final String TAG = "HomeWatcher";
    private Context mContext;
    private IntentFilter mFilter;
    private WatcherInnerListener mListener;
    private InnerReceiver mReceiver;

    public abstract String getFilterAction();

    public AbstractWatcher(Context context) {
        this.mContext = context;
        mFilter = new IntentFilter(getFilterAction());
    }

    public void setmListener(WatcherInnerListener watcherInnerListener) {
        this.mListener = watcherInnerListener;
        mReceiver = new InnerReceiver();
    }

    @Override
    public void startWatcher() {
        if (mReceiver != null) {
            mContext.registerReceiver(mReceiver, mFilter);
        }
    }

    @Override
    public void stopWatcher() {
        if (mReceiver != null) {
            mContext.unregisterReceiver(mReceiver);
        }
    }

    private class InnerReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (action.equals(getFilterAction())) {
                if (mListener != null) {
                    mListener.onListenOccor();
                }
            }
        }

    }
}

其核心思路是持有一個InnerReceiver 並提供動態註冊與註銷的方法,監聽getFilterAction()待子類去實現,至此基本框架就算完成了。
下面看具體使用
定義子類:
public class DeleteWatcher extends AbstractWatcher {
    private static final String ACTION ="com.asus.function.antitouch.delete";

    public DeleteWatcher(Context context) {
        super(context);
    }

    @Override
    public String getFilterAction() {
        return this.ACTION;
    }
}

Activity中使用:

deleteWatcher = new DeleteWatcher(mContext);
deleteWatcher.setmListener(new WatcherInnerListener() {
    @Override
    public void onListenOccor() {
        enable.setChecked(GerSharePerferencesInfo.getLockShow(mContext));
    }
});
deleteWatcher.startWatcher();

@Override
protected void onDestroy() {
    Log.d(TAG,"onDestroy");
    if(null!= deleteWatcher) {
        deleteWatcher.stopWatcher();
    }
    super.onDestroy();
}

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