Android 的wifi状态可以分为两大类,两者均可通过广播监听,相应的Action在WifiManager类中:
第一类:有无wifi源及各个状态间转变
可监听 WIFI_STATE_CHANGED_ACTION。(如下图所示,双击图片可放大)
有五种情况:
1-1 disabled
1-2 disabling
1-3 enable
1-4 enabling
1-5 unknown
可通过不同的Extra值,见下图(双击可放大)获得状态常量:
代码如下:
if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) { int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0); switch (wifiState) { case WifiManager.WIFI_STATE_DISABLED: updateWifiStatus(R.drawable.wifi_disable); Toast.makeText(mContext, R.string.wifi_disable, Toast.LENGTH_LONG).show(); break; case WifiManager.WIFI_STATE_DISABLING: break; case WifiManager.WIFI_STATE_ENABLED: updateWifiStatus(R.drawable.wifi_enable); Toast.makeText(mContext, R.string.wifi_enable, Toast.LENGTH_LONG).show(); break; case WifiManager.WIFI_STATE_ENABLING: break; case WifiManager.WIFI_STATE_UNKNOWN: break; } }
也可通过以下代码实现:
mWifiMng = (WifiManager) mContext .getSystemService(mContext.WIFI_SERVICE); switch (mWifiMng.getWifiState()) { case WifiManager.WIFI_STATE_DISABLED: updateWifiStatus(R.drawable.wifi_disable); Toast.makeText(mContext, R.string.wifi_disable, Toast.LENGTH_LONG).show(); break; case WifiManager.WIFI_STATE_DISABLING: break; case WifiManager.WIFI_STATE_ENABLED: updateWifiStatus(R.drawable.wifi_enable); Toast.makeText(mContext, R.string.wifi_enable, Toast.LENGTH_LONG).show(); break; case WifiManager.WIFI_STATE_ENABLING: break; case WifiManager.WIFI_STATE_UNKNOWN: break; }
第二类:wifi是否连接正常
可监听:NETWORK_STATE_CHANGED_ACTION(如下图所示,双击图片可放大)
有两种状况:
2-1连接
2-1未连接
在OnReceiver方法中,通过不同Extra值,获得连接状况,如下图,双击图片放大:
代码如下:
if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) { Parcelable parcelableExtra = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); if (null != parcelableExtra) { NetworkInfo networkInfo = (NetworkInfo) parcelableExtra; boolean isConnected = networkInfo.isAvailable(); updateNetworkStatus(); } }