美文网首页
LocalBoardcast 与 Boradcast

LocalBoardcast 与 Boradcast

作者: 冰风47 | 来源:发表于2016-06-03 16:53 被阅读247次

本来是在实验通过广播来获取系统状态的功能的. 偶然间发现还有LocalBoardcast这个东西 -_- 真汗颜.
赶紧恶补一下..

摘自网络博客:
在android-support-v4.jar中引入了LocalBroadcastManager,称为局部通知管理器,这种通知的好处是安全性高,效率也高,适合局部通信,可以用来代替Handler更新UI

现在总结一下主要使用流程.(相当简单)
用代码表示了.
(1) 设定一个广播

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) 设定广播接收器

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内设定本地广播接收

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

以上就是三个主要步骤, 当然, 后期可以根据需要进行二次封装以及改造. 去耦

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

相关文章

  • LocalBoardcast 与 Boradcast

    本来是在实验通过广播来获取系统状态的功能的. 偶然间发现还有LocalBoardcast这个东西 -_- 真汗颜....

  • 聊聊ZAB(三)

    协议(实现) ZAB协议包含2种模式:恢复(recovery)和广播(boradcast)。 当服务刚启动或者经历...

  • BroadcastReceiver广播原理分析

    一、 Boradcast前题概要 1、广播分为前台广播和后台广播 发送前台广播(Intent.FLAG_RECEI...

  • Android学习(三)—— 四大组件之Boradcast Re

    本文目录结构:一、广播机制简介二、接收系统广播三、发送自定义广播四、使用本地广播 一、广播机制简介 定义: 类似于...

  • && 与& ,||与|

    回忆知识点i++,,++i变量在前 先用变量符号(☞++/--)在前 先计算

  • 认真与身板

    认真与身板 认真与态度 认真与自信 认真与信心 认真与诚心 认真与正心 认真与正念 认真与正面 认真与精诚 认真与...

  • 与荒野,与你,与自己

    周末了,想跟大家分享一首诗 《阿莱夫》 诗作者:赖尔逊 阿莱夫在草原上盖了一栋房子, 犹如大海上的灯塔。 但你无法...

  • 与雪与丘与故土

  • 与海与浪与念

    木君 下午,在一段段风雨的催促下来到了绥中。天是被蒙起来的,太阳早已不知躲到哪里去了。微弱的日光和着轻柔的海风洒在...

  • 晚风与柳 孤独与狗 桥与落叶 马与白隙 云与苍天 梭与星月 天与地 生与死 树与来路 花与过往 我与你 爱与恨 夜色与酒

网友评论

      本文标题:LocalBoardcast 与 Boradcast

      本文链接:https://www.haomeiwen.com/subject/vafldttx.html