LocalBoardcast 與 Boradcast

本來是在實(shí)驗(yàn)通過廣播來獲取系統(tǒng)狀態(tài)的功能的. 偶然間發(fā)現(xiàn)還有LocalBoardcast這個東西 -_- 真汗顏.
趕緊惡補(bǔ)一下..

摘自網(wǎng)絡(luò)博客:
在android-support-v4.jar中引入了LocalBroadcastManager,稱為局部通知管理器,這種通知的好處是安全性高,效率也高,適合局部通信,可以用來代替Handler更新UI

現(xiàn)在總結(jié)一下主要使用流程.(相當(dāng)簡單)
用代碼表示了.
(1) 設(shè)定一個廣播

private ConnectivityManager mConnectivityManager = null;
private NetworkInfo mNetworkInfo = null;

private BroadcastReceiver mNetworkBoardcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {

        if (intent == null) {
            return;
        }
//            Log.d(logTitle, "onReceive: some boardcast" + intent.toString());
        String action = intent.getAction();
        if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
            mConnectivityManager = (ConnectivityManager) getSystemService(Context
                    .CONNECTIVITY_SERVICE);
            mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
            if (mNetworkInfo != null && mNetworkInfo.isAvailable()) {
                if (mNetworkInfo.getTypeName().equals("WIFI")) {
                    sendNetworkStateBoardcast(ACTION_CONNECTIONED);
                    Log.d(logTitle, "netstate to:" + mNetworkInfo.getTypeName());

                } else {
                    sendNetworkStateBoardcast(STATE_NETWORK_MOBILE);
                    Log.d(logTitle, "netstate to:" + mNetworkInfo.getTypeName());
                }

            } else {
                sendNetworkStateBoardcast(ACTION_NO_CONNECTION);
            }
        }
    }
};

private void sendNetworkStateBoardcast(String state) {
    Intent sendIntent = new Intent(state);  
    LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(sendIntent);
}

(2) 設(shè)定廣播接收器

public class BoardcastReceiverDetectSystemStatus extends BroadcastReceiver {
    Context currentContext;
    public BoardcastReceiverDetectSystemStatus() {
    }
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("broadreveiver", "onReceive: intent is" + intent.toString());
    }
}

(3) activity內(nèi)設(shè)定本地廣播接收

        boardcastReceiverDetectSystemStatus = new BoardcastReceiverDetectSystemStatus(this);
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(ServiceDetectSystemStatus.ACTION_CONNECTIONED);
        intentFilter.addAction(ServiceDetectSystemStatus.ACTION_NO_CONNECTION);
        LocalBroadcastManager.getInstance(this).registerReceiver(boardcastReceiverDetectSystemStatus, intentFilter);

以上就是三個主要步驟, 當(dāng)然, 后期可以根據(jù)需要進(jìn)行二次封裝以及改造. 去耦

官方文檔:
https://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,048評論 25 709
  • 本文轉(zhuǎn)載自http://www.cnblogs.com/lwbqqyumidi/p/4168017.html 1....
    Ernest_Chang閱讀 773評論 0 3
  • 諸多無奈,最近在改一個項(xiàng)目的bug的時候,腦子老是一片空白,可能是最近腦子不夠用,總之,好多東西忘了,閱讀一些別人...
    狗子王1948閱讀 7,848評論 6 53
  • 每一棵玉米 都是一位抱著嬰兒的母親 我的每一條走出村莊的路 都被密密的玉米林遮住淹沒了 有一次我硬闖進(jìn)去 走了幾天...
    燕趙大俠閱讀 389評論 2 0
  • 今天天氣不錯
    龔旭閱讀 132評論 0 0

友情鏈接更多精彩內(nèi)容