Android 基于NetworkCallback的网络状态监听框架

官网文档ConnectivityManager.NetworkCallback
下面是回调方法,通过复写相关方法,达到监听的目的

方法介绍
onAvailable(Network network)网络连接成功,通知可以使用的时候调用
onBlockedStatusChanged(Network network, boolean blocked)当访问指定的网络被阻止或解除阻塞时调用
onCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities)当网络状态修改但仍旧是可用状态时调用
onLinkPropertiesChanged(Network network, LinkProperties linkProperties)当网络连接的属性被修改时调用
onLosing(Network network, int maxMsToLive)当网络正在断开连接时调用
onLost(Network network)当网络已断开连接时调用
onUnavailable()当网络连接超时或网络请求达不到可用要求时调用

我们一般只需要监听onAvailableonLostonCapabilitiesChanged就能达到监听网络状态的效果

    class BipNetworkCallback extends ConnectivityManager.NetworkCallback {
        private int mNetworkType;
        Network mCurrentNetwork;
        CatCmdMessage mCmdMsg;

        BipNetworkCallback(int networkType, CatCmdMessage cmdMsg) {
            mNetworkType = networkType;
            mCmdMsg = cmdMsg;
            mCurrentNetwork = null;
        }

        @Override
        public void onAvailable(Network network) {
            mCurrentNetwork = network;
            CatLog.d(this, "onAvailable got Network: " + network);
            CatLog.d(this, "MSG_ID_SETUP_DATA_CALL");
            if (mChannelApnInfo[mNetworkType - ConnectivityManager.TYPE_MOBILE_BIP0] != null) {
                Message msg = obtainMessage(MSG_ID_SETUP_DATA_CALL,
                        mChannelApnInfo[mNetworkType - ConnectivityManager.TYPE_MOBILE_BIP0].bakCmdMsg);
                AsyncResult.forMessage(msg, null, null);
                msg.sendToTarget();
            }
        }

        @Override
        public void onLost(Network network) {
            CatLog.d(this, "onLost Network: " + network + ", mCurrentNetwork: " + mCurrentNetwork);
            if (network.equals(mCurrentNetwork)) {
                mCurrentNetwork = null;
                if (mChannelApnInfo[mNetworkType - ConnectivityManager.TYPE_MOBILE_BIP0] != null) {
                    CatCmdMessage cmdMsg =
                        mChannelApnInfo[mNetworkType - ConnectivityManager.TYPE_MOBILE_BIP0].bakCmdMsg;
                    teardownDataConnection(cmdMsg);
                    /* DTS2016012800072 z00185430 20160123 add begin */
                    checkSetStatusOrNot(cmdMsg);
                    /* DTS2016012800072 z00185430 20160123 add end */
                }
            }
        }

        @Override
        public void onUnavailable() {
            CatLog.d(this, "onUnavailable");
            sendTerminalResponseHw(ResultCode.BEYOND_TERMINAL_CAPABILITY);
        }

        private void sendTerminalResponseHw(ResultCode rc) {
            if (null != mCmdMsg) {
                mStkService.sendTerminalResponseHw(mCmdMsg.mCmdDet, rc, false, 0, null);
            }
        }
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值