1.添加权限
<!-- wifi相关 -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
2.获取wifi列表
(1) 获取wifiManager
wifiManager = (WifiManager) context.getSystemService(context.WIFI_SERVICE);
(2)注册wifi扫描广播
myWifiScanReceiver=new MyWifiScanReceiver();
IntentFilter intentFilter=new IntentFilter();
intentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
mContext.registerReceiver(myWifiScanReceiver,intentFilter);
private class MyWifiScanReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ArrayList<ScanResult> list; //存放周围wifi热点对象的列表
list = (ArrayList<ScanResult>) wifiManager.getScanResults();
ArrayList<ScanResult> list_new = new ArrayList<>();
for(ScanResult result:list){
list_new.add(result);
}
list_new=sortByLevel(list_new);
wifiListInter.getWifiList(list_new);
try {
mContext.unregisterReceiver(myWifiScanReceiver);
}catch (Exception e){
}
}
}
此处的wifi列表,是自己手动扫描,然后监听扫描结果来获取的,比较最新的列表,当然,你也可以直接调用WifiManager的getScanResults()方法直接获取上次扫描到的wifi列表信息。
wifiManager.startScan();
3.将获取到的wifi列表,按照强度由高到低排序
这里的等级可以根据自己的需求设置等级数
private ArrayList<ScanResult> sortByLevel(ArrayList<ScanResult> list) {
Collections.sort(list, new Comparator<ScanResult>() {
@Override
public int compare(ScanResult scanResult, ScanResult t1) {
int i = wifiManager.calculateSignalLevel(t1.level,4)- wifiManager.calculateSignalLevel(scanResult.level,4);
return i;
}
});
return list;
}
4.获取wifi类别
public static final int WIFICIPHER_NOPASS = 0;
public static final int WIFICIPHER_WEP = 1;
public static final int WIFICIPHER_PSK = 2;
public static final int WIFICIPHER_EAP = 3;
public static final