Android獲取wifi列表的方法
本文實(shí)例為大家分享了Android獲取wifi列表的具體代碼,供大家參考,具體內(nèi)容如下
接著上篇的獲取藍(lán)牙列表,這次我們來(lái)獲取android設(shè)備的wifi列表,話不多少直接上代碼!
1.首先我們先獲取wifi權(quán)限
<!-- 以下是使用wifi訪問(wèn)網(wǎng)絡(luò)所需的權(quán)限 --> <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" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" />
接下來(lái)我們直接來(lái)定義wifiUtil
public class WifiUtil {
private Context context;
public WifiUtil(Context context) {
this.context = context;
}
// TODO: 2021/9/15 獲取本機(jī)WIFI設(shè)備詳細(xì)信息
@SuppressLint("MissingPermission")
public void getDetailsWifiInfo() {
StringBuffer sInfo = new StringBuffer();
WifiManager mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo mWifiInfo = mWifiManager.getConnectionInfo();
int Ip = mWifiInfo.getIpAddress();
String strIp = "" + (Ip & 0xFF) + "." + ((Ip >> 8) & 0xFF) + "." + ((Ip >> 16) & 0xFF) + "." + ((Ip >> 24) & 0xFF);
sInfo.append("\n--BSSID : " + mWifiInfo.getBSSID());
sInfo.append("\n--SSID : " + mWifiInfo.getSSID());
sInfo.append("\n--nIpAddress : " + strIp);
sInfo.append("\n--MacAddress : " + mWifiInfo.getMacAddress());
sInfo.append("\n--NetworkId : " + mWifiInfo.getNetworkId());
sInfo.append("\n--LinkSpeed : " + mWifiInfo.getLinkSpeed() + "Mbps");
sInfo.append("\n--Rssi : " + mWifiInfo.getRssi());
sInfo.append("\n--SupplicantState : " + mWifiInfo.getSupplicantState()+mWifiInfo);
sInfo.append("\n\n\n\n");
Log.d("getDetailsWifiInfo", sInfo.toString());
}
// TODO: 2021/9/15 獲取附近wifi信號(hào)
public List<String> getAroundWifiDeviceInfo() {
StringBuffer sInfo = new StringBuffer();
WifiManager mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo mWifiInfo = mWifiManager.getConnectionInfo();
List<ScanResult> scanResults = mWifiManager.getScanResults();//搜索到的設(shè)備列表
List<ScanResult> newScanResultList = new ArrayList<>();
for (ScanResult scanResult : scanResults) {
int position = getItemPosition(newScanResultList,scanResult);
if (position != -1){
if (newScanResultList.get(position).level < scanResult.level){
newScanResultList.remove(position);
newScanResultList.add(position,scanResult);
}
}else {
newScanResultList.add(scanResult);
}
}
List<String> stringList = new ArrayList<>();
for (int i = 0; i <newScanResultList.size() ; i++) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("設(shè)備名(SSID) ->" + newScanResultList.get(i).SSID + "\n");
stringBuilder.append("信號(hào)強(qiáng)度 ->" + newScanResultList.get(i).level + "\n");
stringBuilder.append("BSSID ->" + newScanResultList.get(i).BSSID + "\n");
stringBuilder.append("level ->" + newScanResultList.get(i).level + "\n");
stringBuilder.append("采集時(shí)間戳 ->" +System.currentTimeMillis() + "\n");
stringBuilder.append("rssi ->" + (mWifiInfo != null && (mWifiInfo.getSSID().replace("\"", "")).equals(newScanResultList.get(i).SSID) ? mWifiInfo.getRssi() : null) + "\n");
//是否為連接信號(hào)(1連接,默認(rèn)為null)
stringBuilder.append("是否為連接信號(hào) ->" + (mWifiInfo != null && (mWifiInfo.getSSID().replace("\"", "")).equals(newScanResultList.get(i).SSID) ? 1: null) + "\n");
stringBuilder.append("信道 - >" +getCurrentChannel(mWifiManager) + "\n");
//1 為2.4g 2 為5g
stringBuilder.append("頻段 ->" + is24GOr5GHz(newScanResultList.get(i).frequency));
stringList.add(stringBuilder.toString());
}
Log.d("getAroundWifiDeviceInfo", sInfo.toString());
return stringList;
}
public static String is24GOr5GHz(int freq) {
if (freq > 2400 && freq < 2500){
return "1";
}else if (freq > 4900 && freq < 5900){
return "2";
}else {
return "無(wú)法判斷";
}
}
/**
* 返回item在list中的坐標(biāo)
*/
private int getItemPosition(List<ScanResult>list, ScanResult item) {
for (int i = 0; i < list.size(); i++) {
if (item.SSID.equals(list.get(i).SSID)) {
return i;
}
}
return -1;
}
public static int getCurrentChannel(WifiManager wifiManager) {
WifiInfo wifiInfo = wifiManager.getConnectionInfo();// 當(dāng)前wifi連接信息
List<ScanResult> scanResults = wifiManager.getScanResults();
for (ScanResult result : scanResults) {
if (result.BSSID.equalsIgnoreCase(wifiInfo.getBSSID())
&& result.SSID.equalsIgnoreCase(wifiInfo.getSSID()
.substring(1, wifiInfo.getSSID().length() - 1))) {
return getChannelByFrequency(result.frequency);
}
}
return -1;
}
/**
* 根據(jù)頻率獲得信道
*
* @param frequency
* @return
*/
public static int getChannelByFrequency(int frequency) {
int channel = -1;
switch (frequency) {
case 2412:
channel = 1;
break;
case 2417:
channel = 2;
break;
case 2422:
channel = 3;
break;
case 2427:
channel = 4;
break;
case 2432:
channel = 5;
break;
case 2437:
channel = 6;
break;
case 2442:
channel = 7;
break;
case 2447:
channel = 8;
break;
case 2452:
channel = 9;
break;
case 2457:
channel = 10;
break;
case 2462:
channel = 11;
break;
case 2467:
channel = 12;
break;
case 2472:
channel = 13;
break;
case 2484:
channel = 14;
break;
case 5745:
channel = 149;
break;
case 5765:
channel = 153;
break;
case 5785:
channel = 157;
break;
case 5805:
channel = 161;
break;
case 5825:
channel = 165;
break;
}
return channel;
}
}
記得獲取wifi的過(guò)程中要去掉重復(fù)的信號(hào)哈,去重代碼
for (ScanResult scanResult : scanResults) {
int position = getItemPosition(newScanResultList,scanResult);
if (position != -1){
if (newScanResultList.get(position).level < scanResult.level){
newScanResultList.remove(position);
newScanResultList.add(position,scanResult);
}
}else {
newScanResultList.add(scanResult);
}
}
2.在需要獲取列表的地方設(shè)置數(shù)據(jù),記得動(dòng)態(tài)獲取權(quán)限哈
// TODO: 2021/9/18 設(shè)置wifi管理器并動(dòng)態(tài)獲取手機(jī)權(quán)限
@SuppressLint({"CheckResult","NotifyDataSetChanged"})
private void setWifiManager() {
RxPermissions rxPermissions = new RxPermissions(this);
rxPermissions.requestEach(Manifest.permission.ACCESS_FINE_LOCATION)
.subscribe(permission -> {
if (permission.name.equalsIgnoreCase(Manifest.permission.ACCESS_FINE_LOCATION)) {
wifiUtil = new WifiUtil(this);
wifiListAdapter.getDatas().clear();
wifiList.clear();
wifiList.add(getString(R.string.wifi_list));
wifiList.addAll(wifiUtil.getAroundWifiDeviceInfo());
for (int i = 0; i < wifiList.size(); i++) {
typeBeanList.add(new TypeBean(true, wifiList.get(i)));
}
wifiListAdapter.notifyDataSetChanged();
}
});
}
3.展示結(jié)果

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android自定義ViewGroup實(shí)現(xiàn)受邊界限制的滾動(dòng)操作(3)
這篇文章主要為大家詳細(xì)介紹了Android自定義ViewGroup實(shí)現(xiàn)受邊界限制的滾動(dòng)操作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12
FFmpeg?Principle分析Out?put?File?數(shù)據(jù)結(jié)構(gòu)
這篇文章主要為大家介紹了FFmpeg?Principle分析Out?put?File?數(shù)據(jù)結(jié)構(gòu),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
Android實(shí)現(xiàn)訂單倒計(jì)時(shí)功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)訂單倒計(jì)時(shí)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01
實(shí)例詳解用戶輸入 i. 檢測(cè)常用手勢(shì)
通過(guò)本段代碼給大家介紹當(dāng)用戶輸入i檢測(cè)常用手勢(shì)的相關(guān)內(nèi)容,代碼簡(jiǎn)單易懂,感興趣的朋友一起學(xué)習(xí)吧2016-01-01
android 復(fù)制 粘貼 剪切功能應(yīng)用
網(wǎng)上有很多android 復(fù)制 粘貼 剪切功能的文章,只是放到自己的程序中不知道如何處理,現(xiàn)在尋得一可行方法,需要的朋友可以參考下2012-11-11
Android studio點(diǎn)擊跳轉(zhuǎn)WebView詳解
這篇文章主要為大家詳細(xì)介紹了Android studio點(diǎn)擊跳轉(zhuǎn)WebView的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09
Android使用MediaRecorder實(shí)現(xiàn)錄像功能
這篇文章主要為大家詳細(xì)介紹了Android使用MediaRecorder實(shí)現(xiàn)錄像功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06

