1 需求:监听网络是正在连接,还是连接成功,还是连接失败
监听网络状态变化需要发送一个广播, 广播的参数为:
WifiManager.NETWORK_STATE_CHANGED_ACTION
然后接收广播,(注意,网络状态变化时,广播中会获取一个:NetworkInfo ,通过NetworkInfo 的值进行判断):
if(WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(intent.getAction())){
NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
if(NetworkInfo.State.DISCONNECTED == info.getState()){//wifi没连接上
}else if(NetworkInfo.State.CONNECTED == info.getState()){//wifi连接上了
}else if(NetworkInfo.State.CONNECTING == info.getState()){//正在连接
}
}
2:需求:当某一个wifi热点关闭时, 我们需要监听该变化,并且做出相应的反应;
发送一个广播,参数为:
WifiManager.SCAN_RESULTS_AVAILABLE_ACTION
接受广播:
if(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(intent.getAction())){
LogUtils.Debug_E(WifiSettingFragment.class, "网络列表变化了!");
}
我这边测试结果是:不仅仅是当关闭或开启一个wifi热点时, 可以监听到,还有网络wifi强度等变化时,都能够监听到;所以小伙伴处理业务逻辑的时候,这一点是需要注意的;
接下来我总结一下我在项目中wifi开发遇到的坑:
1:getScanResults()获取到结果会有重复SSID的wifi热点,我们需要去重;
2:getConfiguredNetworks()是配置好的wifi热点信息,也就是连接过的wifi热点信息;
3:一般来说,如果连接成功或者正在连接的话,该wifi热点都是在UI列表第一个为位置,这一点是需要注意的;
最后附上我这边封装好的wifi支持类,里面有可能你用到的方法;
package com.app.test.wifitest.wifi;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.text.TextUtils;
import android.util.Log;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* Created by ${liumegnqiang} on 2017/6/20.
*/
public class WifiSupport {
private static final S