Android 中监听WIFI连接状态变化
2017-03-20 20:13
453 查看
Android应用开发过程中通过注册广播监听Wifi状态变化:
广播中获取的action为WifiManager.WIFI_STATE_CHANGED_ACTION用于监听Android Wifi打开或关闭的状态,WifiManager.NETWORK_STATE_CHANGED_ACTION用于判断是否连接到了有效wifi(不能用于判断是否能够连接互联网)。
在收到action 为WifiManager.NETWORK_STATE_CHANGED_ACTION的广播时,通过
以上三个方法能够获取手机当前连接的Wifi信息,注意在wifi断开时Intent中不包含WifiInfo对象,却包含bssid。
动态注册广播:
AndroidManifest添加权限:
广播中获取的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<WifiConfiguration> 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" />
相关文章推荐
- Android判断wifi状态 监听wifi连接
- Android 实时监测(监听)网络连接状态变化
- android 监听网络连接状态的变化
- 【Android 】注册广播,实时监听网络连接与断开状态变化
- android-监听wifi状态和信号强度变化
- 监听android wifi状态变化监听
- 监听wifi热点连接状态变化
- Android 通过注册广播,实时监听网络连接与断开状态的变化
- Android 实时监测(监听)网络连接状态变化
- Android 实时监测(监听)网络连接状态变化
- Android 注册广播,实时监听网络连接与断开状态变化
- Android监听网络连接状态变化
- Android 判定网络连接状态 以及监听网络链接状态的变化
- Android 实时监测(监听)网络连接状态变化
- Android 实时监测(监听)网络连接状态变化
- Android 广播监听wifi和流量网络状态变化
- Android 实时监测(监听)网络连接状态变化
- Android监听网络状态变化与WIFI移动网的判别
- android手机网络状态监听,判断手机连接的是移动网络还是wifi等
- Android 利用广播监听usb连接状态(变化情况)