Android应用开发过程中通过注册广播监听Wifi状态变化:
广播中获取的action为WifiManager.WIFI_STATE_CHANGED_ACTION用于监听Android Wifi打开或关闭的状态,WifiManager.NETWORK_STATE_CHANGED_ACTION用于判断是否连接到了有效wifi(不能用于判断是否能够连接互联网)。
在收到action 为WifiManager.NETWORK_STATE_CHANGED_ACTION的广播时,通过

NetworkInfo networkInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);WifiInfo wifiInfo = intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO);String bssid = intent.getStringExtra(WifiManager.EXTRA_BSSID);

以上三个方法能够获取手机当前连接的Wifi信息,注意在wifi断开时Intent中不包含WifiInfo对象,却包含bssid。

  class NetworkConnectChangedReceiver extends BroadcastReceiver {        @Override        public void onReceive(Context context, Intent intent) {            String action = intent.getAction();            Bundle extras = intent.getExtras();            L.e("actioin:"+action);            L.e("==>"+printBundle(extras));            if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) {//这个监听wifi的打开与关闭,与wifi的连接无关                int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, -1);                L.e("WIFI状态", "wifiState:" + wifiState);                switch (wifiState) {                    case WifiManager.WIFI_STATE_DISABLED:                        L.e("WIFI状态", "wifiState:WIFI_STATE_DISABLED");                        break;                    case WifiManager.WIFI_STATE_DISABLING:                        L.e("WIFI状态", "wifiState:WIFI_STATE_DISABLING");                        break;                    case WifiManager.WIFI_STATE_ENABLED:                        L.e("WIFI状态", "wifiState:WIFI_STATE_ENABLED");                        break;                    case WifiManager.WIFI_STATE_ENABLING:                        L.e("WIFI状态", "wifiState:WIFI_STATE_ENABLING");                        break;                    case WifiManager.WIFI_STATE_UNKNOWN:                        L.e("WIFI状态", "wifiState:WIFI_STATE_UNKNOWN");                        break;                    //                }            }            // 这个监听wifi的连接状态即是否连上了一个有效无线路由,当上边广播的状态是WifiManager.WIFI_STATE_DISABLING,和WIFI_STATE_DISABLED的时候,根本不会接到这个广播。            // 在上边广播接到广播是WifiManager.WIFI_STATE_ENABLED状态的同时也会接到这个广播,当然刚打开wifi肯定还没有连接到有效的无线            if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) {                Parcelable parcelableExtra = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);                WifiInfo wifiInfo = intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO);                String bssid = intent.getStringExtra(WifiManager.EXTRA_BSSID);                if (null != parcelableExtra && !isJoinTimeOut) {                    NetworkInfo networkInfo = (NetworkInfo) parcelableExtra;                    NetworkInfo.State state = networkInfo.getState();                    L.e("NetWork Sate Change:"+state+" connectedBssid:"+connectedBssid);                    if(state==NetworkInfo.State.DISCONNECTED){                        if(connectedBssid.equals(bssid)){                            boolean findCfg=false;                            L.e("连接耗时:" + ((System.currentTimeMillis() - start) / 1000.0) + "s");                            if (progressWheelDialog != null) {                                progressWheelDialog.setTextMsg("灯被成功加入ssid=" + mScanResult.SSID + "的WIFI网络,系统开始切换到指定网络...");                            }                            List configuredNetworks = wifiManager.getConfiguredNetworks();                            for(WifiConfiguration configuration:configuredNetworks){                                L.e(configuration.SSID+"========>"+mScanResult.SSID);                                String addSSID=mScanResult.SSID;                                if(!(mScanResult.SSID.startsWith("\"") && mScanResult.SSID.endsWith("\""))){                                     addSSID="\""+addSSID+"\"";                                }                                if(configuration.SSID.equals(addSSID)){                                    findCfg=true;                                    L.i("找到连接wifi的Configuration..尝试切换wifi");                                    wifiManager.enableNetwork(configuration.networkId,true);                                    break;                                }                            }                            if(!findCfg){                                L.i("未找到连接wifi的Configuration..尝试创建连接...");                                int type=3;                                if(TextUtils.isEmpty(mPass)){                                    type=0;                                }                                WifiConfiguration configuration=  WifiUtils.createWifiInfoCfg(mScanResult.SSID,mPass,type);                                L.i("新的wifi配置:"+configuration);                                int newNetId = wifiManager.addNetwork(configuration);                                L.i("新的netId="+newNetId);                                wifiManager.enableNetwork(newNetId,true);                            }                        }                    }else if(state== NetworkInfo.State.CONNECTED){                        if(mScanResult!=null) {                            String ssid = wifiInfo.getSSID();                            String addSSID=mScanResult.SSID;                            if(!(mScanResult.SSID.startsWith("\"") && mScanResult.SSID.endsWith("\""))){                                addSSID="\""+addSSID+"\"";                            }                            L.i(ssid + "***>" + mScanResult.SSID);                            L.i("总共耗时:"+((System.currentTimeMillis()-start)/1000.0));                            if (ssid.equals(addSSID)) {                                handler.removeCallbacks(watchDog);//                                dismissLoadDialog(TYPE_LOAD_DIALOG);                                if(progressWheelDialog!=null) {                                    progressWheelDialog.dismiss();                                }                                T.showShort(getApplicationContext(), "操作成功!");                                Intent intent1 = new Intent(WiFiActivity2.this, MainActivity.class);                                intent1.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);                                startActivity(intent1);                            }                        }                    }                }            }        }        private  String printBundle(Bundle bundle) {            StringBuilder sb = new StringBuilder();            for (String key : bundle.keySet()) {                if (key.equals(WifiManager.EXTRA_WIFI_STATE)) {                    sb.append("\nkey:" + key + ", value:" + bundle.getInt(key));                } else {                    sb.append("\nkey:" + key + ", value:" + bundle.get(key));                }            }//        L.e("bundle:"+bundle);            return sb.toString();        }    }

动态注册广播:

   private void registerNetworkConnectChangeReceiver() {        IntentFilter filter = new IntentFilter();        filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);        filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);        filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);        filter.addAction(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION);        filter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);        networkConnectChangedReceiver = new NetworkConnectChangedReceiver();        registerReceiver(networkConnectChangedReceiver, filter);    }

AndroidManifest添加权限:

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />    <uses-permission android:name="android.permission.INTERNET" />    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

更多相关文章

  1. Android(安卓)BLE 总结-源码篇(BluetoothLeAdvertiser)
  2. android 网络状态
  3. 阅读《Android(安卓)从入门到精通》(33)——Intent 分类
  4. 手机蓝牙和蓝牙模块进行通信
  5. Android(安卓)连接Mysql数据库步骤(新手步骤)
  6. Android第一行代码学习笔记Chapter5&6
  7. unable to connect to 192.168.1.110:5555 解决办法
  8. Android(安卓)判断网络状态
  9. mac下android真机调试,连接不上设备的解决方法

随机推荐

  1. Android NDK工程创建与编译运行
  2. Android左右连接和USING
  3. htc g11 hboot 2.02.0000 unlock (androi
  4. android中TextAppearanceSpan的使用
  5. 沈大海移动开发课程android,j2me
  6. Android ListView 一些设置 , 去除边缘阴
  7. Android中的GridView详解
  8. Android单选框基本应用方式
  9. android WebView 开发指栏
  10. android教程资源 免费android深入浅出课