Anroid Network Change - litonghui/TechBlog GitHub Wiki

1. 关于网络切换的监测,动态广播监听方法:

    mContext = this;
    BroadcastReceiver mNetChangeReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction(); //当前接受到的广播的标识(行动/意图)
            // 当当前接受到的广播的标识(意图)为网络状态的标识时做相应判断
            if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
                // 获取网络连接管理器
                ConnectivityManager cm = (ConnectivityManager) context
                        .getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo info = cm.getActiveNetworkInfo();

                if (info != null && info.isConnected()) {

                    //Log.v("lth", "Type "+info.getType());
                } else {

                    //Log.v("lth", "Type NULL");
                }
            }
        }
    };
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
    if (mContext != null) {
        mContext.registerReceiver(mNetChangeReceiver, intentFilter);
    }
如果动态注册改方法,onReceive 不单单是在网络切换状态会被调用。正常网络状态检测时也会被调用,不能正确控制触发网络切换调用需求。

2. 修改使用静态方法实现网络切换

    public class NewWorkReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction(); //当前接受到的广播的标识(行动/意图)
            // 当当前接受到的广播的标识(意图)为网络状态的标识时做相应判断
            if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
                // 获取网络连接管理器
                ConnectivityManager cm = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo info = cm.getActiveNetworkInfo();

                if (info != null && info.isConnected()) {
                    Log.v("lth", "isConnected");
                } else {
                    Log.v("lth", "is not Connected");
                }
            }
        }
    }
    <receiver android:name=".NewWorkReceiver">
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
        </intent-filter>
    </receiver>
网络切换状态会被调用。正常网络状态检测不会调用,满足需求。
⚠️ **GitHub.com Fallback** ⚠️