如何判断当前WiFi的连接状态

BroadcastReceiver是Android中的一种组件,用于接收系统和应用程序发出的广播消息。广播可以是系统级别的,如设备开机、网络状态变化等,也可以是应用程序级别的,如自定义广播消息。

BroadcastReceiver可以通过注册接收器的方式来接收广播消息,可以在AndroidManifest.xml文件中静态注册,也可以在代码中动态注册。一旦注册完成后,当有广播消息被发出时,BroadcastReceiver会自动接收并处理该消息

Android7.0之后,如果我们需要实时监听监听网络状态变化,需要动态注册广播;

 

一、动态注册广播

private NetState netState;
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_wifi);
        //注册广播
        netState = new NetState();
        IntentFilter filter = new IntentFilter();
        filter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
        filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
        this.registerReceiver(netState, filter);

    }

二、方法

//--------- 判断WiFi的连接状态  -------
    public class NetState extends BroadcastReceiver {
    @SuppressLint("SetTextI18n")
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent == null) return;
        String action = intent.getAction();
        if (WifiManager.SUPPLICANT_STATE_CHANGED_ACTION.equals(action)) {
            //主要用来判断密码错误,认证失败
            int error = intent.getIntExtra(WifiManager.EXTRA_SUPPLICANT_ERROR, 0);

            if (WifiManager.ERROR_AUTHENTICATING == error) {
                //密码错误,认证失败
                Log.e(TAG, "密码错误或认证失败");
            }
        } else if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) {
            NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
            if (info == null) return;
            Log.e(TAG, "State: " + info.getState());
//                if (info.getState().equals(NetworkInfo.State.DISCONNECTED)) {
//                    Log.e(TAG, "连接已断开");
//                } else if (info.getState().equals(NetworkInfo.State.CONNECTED)) {
//                } else {
            NetworkInfo.DetailedState state = info.getDetailedState();
            //Log.e(TAG, "DetailedState : "+state.toString());
            if (state == NetworkInfo.DetailedState.CONNECTING) {
                Log.e(TAG, "WIFI连接中...");

            } else if (state == NetworkInfo.DetailedState.AUTHENTICATING) {
                Log.e(TAG, "WIFI正在验证身份信息...");
            } else if (state == NetworkInfo.DetailedState.OBTAINING_IPADDR) {
                Log.e(TAG, "WIFI正在获取IP地址...");
            } else if (state == NetworkInfo.DetailedState.CONNECTED) {
                Log.e(TAG, "WIFI连接成功");
                WifiInfo wifiInfo = getCurrentWifiInfo();
                Toast.makeText(WifiActivity.this, "已连接到WIFI : " + wifiInfo.getSSID(), Toast.LENGTH_SHORT).show();
                invalidateOptionsMenu();
                mWifiApState = "已连接";
            } else if (state == NetworkInfo.DetailedState.DISCONNECTED) {
                Log.e(TAG, "WIFI连接断开");
                Toast.makeText(WifiActivity.this, "WIFI连接断开", Toast.LENGTH_SHORT).show();
                mWifiApState = "未连接";
                invalidateOptionsMenu();
            } else if (state == NetworkInfo.DetailedState.FAILED) {
                Log.e(TAG, "WIFI连接失败");
                Toast.makeText(WifiActivity.this, "WIFI连接失败", Toast.LENGTH_SHORT).show();
                invalidateOptionsMenu();
            } else if (state == NetworkInfo.DetailedState.SCANNING) {
                Log.i(TAG, "WIFI扫描中...");
            } else if (state == NetworkInfo.DetailedState.BLOCKED) {
                Log.i(TAG, "WIFI访问被阻止");
                Toast.makeText(WifiActivity.this, "WIFI访问被阻止", Toast.LENGTH_SHORT).show();
            } else if (state == NetworkInfo.DetailedState.VERIFYING_POOR_LINK) {
                Log.i(TAG, "WIFI链路连通性差");
            } else if (state == NetworkInfo.DetailedState.CAPTIVE_PORTAL_CHECK) {
                Log.i(TAG, "WIFI检查网络是否是受控门户");
            }
            //}
        }
    }
}

三:在onDestroy()销毁的方法取消注册

@Override
    protected void onDestroy() {
        super.onDestroy();

        if (netState != null) {  // 取消注册 BroadcastReceiver
            unregisterReceiver(netState);
        }
    }

如有错误,不吝赐教!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值