Android wifi打开关闭以及状态监听

前段时间做了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
其实是一个值看源码:Android wifi打开关闭以及状态监听_第1张图片
看到上面的注解我们可以知道系统为我们提供了wifi的五种状态分别是:

  • enabled(已连接)
  • disabled(已关闭)
  • enabling(连接中)
  • disabling(关闭中)
  • unknown(未知)

那么我们如何获取这几种状态呢,了解广播的同学都知道,在广播接收器中我们会根据IntentAction来判断当前接受的是哪个广播,如果当前的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类型
Android wifi打开关闭以及状态监听_第2张图片
Android wifi打开关闭以及状态监听_第3张图片
Android wifi打开关闭以及状态监听_第4张图片
所以只需要判断我们获取的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;
                }

你可能感兴趣的:(android)