package com.zznode.walktest.utils;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Build;
import com.zznode.walktest.AppConstant;
import com.zznode.walktest.Entity.WifiListEntity;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* Author by ckl, Email xx@xx.com, Date on 2020/7/8.
* PS: Not easy to write code, please indicate.
*/
public class WifiUtil {
private static WifiUtil instance = null;
private final WifiManager mWifiManager;
private Context mContext;
private WifiUtil(Context context) {
this.mContext = context;
mWifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
}
public static WifiUtil getInstance(Context context){
if (instance == null){
synchronized (WifiUtil.class){
if (instance == null){
instance = new WifiUtil(context);
}
}
}
return instance;
}
/**
* 判断wifi是否可用
* @param
* @return
*/
public boolean isWiFiActive() {
Context context = mContext.getApplicationContext();
ConnectivityManager connectivity = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null) {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getTypeName().equals("WIFI") && info[i].isConnected()) {
return true;
}
}
}
}
return false;
}
/**
* 获取当前连接WIFI的SSID
*/
public String getSSID() {
assert mWifiManager != null;
WifiInfo info = mWifiManager.getConnectionInfo();
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
return info.getSSID();
} else {
return info.getSSID().replace("\"", "");
}
}
/**
* 获取当前连接WIFI的Rssi
*/
public int getRssi() {
assert mWifiManager != null;
WifiInfo info = mWifiManager.getConnectionInfo();
return info.getRssi();
}
/**
* 获取连接速度 info.LINK_SPEED_UNITS 单位Mbps
*/
public int getLinkSpeed(){
assert mWifiManager != null;
WifiInfo info = mWifiManager.getConnectionInfo();
return info.getLinkSpeed();
}
/**
* 获取wifi列表
*/
public List<WifiListEntity> getWifiList(){
List<ScanResult> scanResult = mWifiManager.getScanResults();
/**
* wifi列表
*/
List<WifiListEntity> wifiList = new ArrayList<>();
Iterator localIterator = scanResult.iterator();
while (localIterator.hasNext()) {
ScanResult sr = (ScanResult)localIterator.next();
WifiListEntity we = new WifiListEntity();
/*if(isHaveScanResult){*/
we.setScanResult(sr);
/*}*/
we.setBssid(sr.BSSID);
we.setSsid(sr.SSID);
we.setCapabilities(sr.capabilities);
we.setFrequency(sr.frequency);
we.setLevel(sr.level);
// 用传入的freq值进行判断,若在2400~2500之间,不含边界为24GHz
//5GHz(frequency),即用自己的信道频率值进行判断,如果频率值在4900~5900之间
if(sr.frequency>4900 &&sr.frequency<5900){
we.setBand(AppConstant.CHANNEL_5G);
}
else if(sr.frequency>2400 &&sr.frequency<2500){
we.setBand(AppConstant.CHANNEL_24G);
}
else{
we.setBand(AppConstant.CHANNEL_5G);
}
we.setChannel(getChannel(sr.frequency));
wifiList.add(we);
}
wifiList=WifiListEntity.sortSiganal(wifiList,1);
return wifiList;
}
/**
* 同频,信道相同(且信号高于-75dBm,不包括当前wifi)
* @param
* @param
* @return
*/
public int getCalSameFrequencyInterference(){
assert mWifiManager != null;
WifiInfo info = mWifiManager.getConnectionInfo();
int localSfi=0;
int channel = getChannel(info.getFrequency());
List<WifiListEntity> wifiList = getWifiList();
for( WifiListEntity we :wifiList){
if(channel==we.getChannel() && we.getLevel() >= -55 && !we.isCurNetwork()){
localSfi++;
}
}
return localSfi;
}
/**
* 邻频 前后2个频率的信道(且信号高于-75dBm)
* @param
* @param
* @return
*/
public int getCalNearbyFrequencyInterference()
{
assert mWifiManager != null;
WifiInfo info = mWifiManager.getConnectionInfo();
int localSfi=0;
int channel = getChannel(info.getFrequency());
List<WifiListEntity> wifiList = getWifiList();
for( WifiListEntity we :wifiList){
if((channel==we.getChannel()-1 || channel==we.getChannel()-2 || channel==we.getChannel()+1 || channel==we.getChannel()+2) && we.getLevel() >= -55){
localSfi++;
}
}
return localSfi;
}
/**
* 根据频率获取信道
* @param paramInt
* @return
*/
public static int getChannel(int paramInt) {
if (paramInt > 10000) {
paramInt /= 10000;
}
switch (paramInt) {
default:
return 0;
case 2412:
return 1;
case 2417:
return 2;
case 2422:
return 3;
case 2427:
return 4;
case 2432:
return 5;
case 2437:
return 6;
case 2442:
return 7;
case 2447:
return 8;
case 2452:
return 9;
case 2457:
return 10;
case 2462:
return 11;
case 2467:
return 12;
case 2472:
return 13;
case 2484:
return 14;
case 5745:
return 149;
case 5765:
return 153;
case 5785:
return 157;
case 5805:
return 161;
case 5825:
return 165;
case 5180:
return 36;
case 5200:
return 40;
case 5220:
return 44;
case 5240:
return 48;
case 5260:
return 52;
case 5280:
return 56;
case 5300:
return 60;
case 5320:
return 64;
case 5500:
return 100;
case 5520:
return 104;
}
}
}
android wifi信息获取
最新推荐文章于 2024-04-28 07:09:53 发布
该博客主要展示了如何在Android中获取WiFi的相关信息,包括判断WiFi是否可用、获取当前连接的SSID、RSSI、链接速度,以及扫描并解析WiFi列表。此外,还提供了计算同频干扰和邻频干扰的方法。
部署运行你感兴趣的模型镜像
您可能感兴趣的与本文相关的镜像
Qwen3-8B
文本生成
Qwen3
Qwen3 是 Qwen 系列中的最新一代大型语言模型,提供了一整套密集型和专家混合(MoE)模型。基于广泛的训练,Qwen3 在推理、指令执行、代理能力和多语言支持方面取得了突破性进展
1967

被折叠的 条评论
为什么被折叠?



