官网文档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 () | 当网络连接超时或网络请求达不到可用要求时调用 |
我们一般只需要监听onAvailable
、onLost
、onCapabilitiesChanged
就能达到监听网络状态的效果
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);
}
}
}