安卓网络状态切换广播接收者(WIFI状态与手机网络状态)

public class NetConnectChangedReceiver extends BroadcastReceiver {
    private static final String TAG = "NetConnectChanged";

    /**
     * 安卓7.0以上对ConnectivityManager.CONNECTIVITY_ACTION无法静态注册
     * 所以在需要的地方动态注册
     * //注册网络状态监听
     * IntentFilter filter = new IntentFilter();
     * //监听wifi连接(手机与路由器之间的连接)
     * filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
     * //监听互联网连通性(也就是是否已经可以上网了),当然只是指wifi网络的范畴
     * filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
     * //这个是监听网络状态的,包括了wifi和移动网络。
     * filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
     * mNetConnectChangedReceiver = new NetConnectChangedReceiver();
     * registerReceiver(mNetConnectChangedReceiver, filter);
     */
    @Override
    public void onReceive(Context context, Intent intent) {
        // 监听wifi的打开与关闭的5种状态
        if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(intent.getAction())) {
            int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);
            switch (wifiState) {
                case WifiManager.WIFI_STATE_ENABLING:
                    Log.e(TAG, "WiFi正要开启的状态, 是 Enabled 和 Disabled 的临界状态");
                    break;
                case WifiManager.WIFI_STATE_ENABLED:
                    Log.e(TAG, "WiFi已经完全开启的状态");
                    break;
                case WifiManager.WIFI_STATE_DISABLING:
                    Log.e(TAG, "WiFi正要关闭的状态, 是 Disabled 和 Enabled 的临界状态");
                    break;
                case WifiManager.WIFI_STATE_DISABLED:
                    Log.e(TAG, "WiFi已经完全关闭的状态");
                    break;
                case WifiManager.WIFI_STATE_UNKNOWN:
                    Log.e(TAG, "WiFi未知的状态, WiFi开启, 关闭过程中出现异常, 或是厂家未配备WiFi外挂模块会出现的情况");
                    break;
            }
        }

        // 监听wifi的连接状态,即是否连接上了一个有效wifi
        if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(intent.getAction())) {
            Parcelable parcelableExtra = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
            if (null != parcelableExtra) {
                // 获取联网状态的NetWorkInfo对象
                NetworkInfo networkInfo = (NetworkInfo) parcelableExtra;
                //获取的State对象则代表着连接成功与否等状态
                NetworkInfo.State state = networkInfo.getState();
                //判断网络是否已经连接
                boolean isConnected = state == NetworkInfo.State.CONNECTED;
                if (isConnected) {
                    Log.e(TAG, "连接上了wifi");

                } else {

                }
            }
        }

        // 监听网络连接,包括wifi和移动数据的打开和关闭,以及连接上可用的连接都会接到监听
        if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {
            //获取联网状态的NetworkInfo对象
            NetworkInfo info = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
            if (info != null) {
                //如果当前的网络连接成功并且网络连接可用
                if (NetworkInfo.State.CONNECTED == info.getState() && info.isAvailable()) {

                    if (info.getType() == ConnectivityManager.TYPE_WIFI) {
                        Log.e(TAG, "连接上了wifi网络");

                        if (mListener != null) {
                            mListener.onWifi(true);
                        }

                    } else if (info.getType() == ConnectivityManager.TYPE_MOBILE) {
                        Log.e(TAG, "连接上了手机网络");

                        if (mListener != null) {
                            mListener.onMobile(true);
                        }

                    }

                } else {

                    if (info.getType() == ConnectivityManager.TYPE_WIFI) {
                        Log.e(TAG, "断开了wifi网络");

                        if (mListener != null) {
                            mListener.onWifi(false);
                        }

                    } else if (info.getType() == ConnectivityManager.TYPE_MOBILE) {
                        Log.e(TAG, "断开了手机网络");

                        if (mListener != null) {
                            mListener.onMobile(false);
                        }

                    }

                }


            }
        }
    }

    /**
     * 网络状态改变监听器
     */
    private OnNetConnectChangedListener mListener;

    /**
     * 网络状态改变监听器
     */
    public interface OnNetConnectChangedListener {

        /**
         * 是否连接上了wifi网络
         *
         * @param isConnected
         */
        void onWifi(boolean isConnected);

        /**
         * 是否连接上了手机网络
         *
         * @param isConnected
         */
        void onMobile(boolean isConnected);
    }

    /**
     * 设置网络状态改变监听
     *
     * @param listener
     */
    public void setOnNetConnectChangedListener(OnNetConnectChangedListener listener) {
        mListener = listener;
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值