前段时间做了wifi打开关闭的功能,在这里记录分享一下:
public void setWifiEnable(Context context,boolean state){
//首先,用Context通过getSystemService获取wifimanager
WifiManager mWifiManager = (WifiManager)
getContext().getSystemService(Context.WIFI_SERVICE);
//调用WifiManager的setWifiEnabled方法设置wifi的打开或者关闭,只需把下面的state改为布尔值即可(true:打开 false:关闭)
mWifiManager.setWifiEnabled(state);
}
那么我们如何监听wifi的打开状态呢?
系统为我们提供了相应的广播来监听当前wifi的打开状态:
WifiManager.WIFI_STATE_CHANGED_ACTION
或者
android.net.wifi.WIFI_STATE_CHANGED
其实是一个值看源码:
看到上面的注解我们可以知道系统为我们提供了wifi的五种状态分别是:
- enabled(已连接)
- disabled(已关闭)
- enabling(连接中)
- disabling(关闭中)
- unknown(未知)
那么我们如何获取这几种状态呢,了解广播的同学都知道,在广播接收器中我们会根据Intent的Action来判断当前接受的是哪个广播,如果当前的Action是我们所需要的这个广播WifiManager.WIFI_STATE_CHANGED_ACTION,那么从当前的Intent中我们可以取到一个int类型的值,参数传WifiManager.EXTRA_WIFI_STATE,默认值取0就可以了,如下:
int mWifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);
那么获取到int类型的数据后,如何根据数据判断当前类型呢?前面说过系统提供给我们的五种状态,其实这五种状态都在WifiManager中声明了对应的int类型
所以只需要判断我们获取的int类型数据是否等于这几个值就可以了。
代码如下:
if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) {
//获取当前的wifi状态int类型数据
int mWifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);
switch (mWifiState ) {
case WifiManager.WIFI_STATE_ENABLED:
//已打开
break;
case WifiManager.WIFI_STATE_ENABLING:
//打开中
break;
case WifiManager.WIFI_STATE_DISABLED:
//已关闭
break;
case WifiManager.WIFI_STATE_DISABLING:
//关闭中
break;
case WifiManager.WIFI_STATE_UNKNOWN:
//未知
break;
}