gpt4 book ai didi

java - 如果 wifi 名称匹配,Android 以编程方式连接到 Wifi

转载 作者:太空狗 更新时间:2023-10-29 13:19:46 26 4
gpt4 key购买 nike

我想构建一个应用程序,检查所有可用的 WiFi 网络,

如果网络的 SSID 与搜索键匹配,则连接到该网络,如果两个网络匹配,则连接到信号强度更高的网络。

例如SearchKey = "打开";

这是检查所有 wifi 名称的代码:

    if (networkInfo.isConnected()) {
ArrayList<ScanResult> mItems = new ArrayList<ScanResult>();
List<ScanResult> results = wifiManager.getScanResults();
int size = results.size();
HashMap<String, Integer> signalStrength = new HashMap<String, Integer>();
try {
for (int i = 0; i < size; i++) {
ScanResult result = results.get(i);
if (!result.SSID.isEmpty()) {
String key = result.SSID + " " + result.capabilities;
Log.i("TAG", "ssid: " + result.SSID + " | level: " + result.level);
}

那我就需要

Arrays.asList(mItems).contains("Open")

我被困在这里,如何正确检查关键字“Open”是否存在,如果存在,则获取全名并在下面使用。 ?

在线示例如何连接。

WifiConfiguration wifiConfig = new WifiConfiguration();
wifiConfig.SSID = String.format("\"%s\"", ssid);
wifiConfig.preSharedKey = String.format("\"%s\"", key);

WifiManager wifiManager = (WifiManager).getSystemService(WIFI_SERVICE);
//remember id
int netId = wifiManager.addNetwork(wifiConfig);
wifiManager.disconnect();
wifiManager.enableNetwork(netId, true);
wifiManager.reconnect();

更新代码 ------------------------------ - ------------- ------------------ - -- -------------------------- ----------

如何检查,这有效但现在我需要根据信号强度实现搜索

if (!result.SSID.isEmpty()) {
String key = result.SSID + " " + result.capabilities;
Log.i("TAG", "ssid: " + result.SSID + " | level: " + result.level);


if(result.SSID.contains("Open")) {
String useSSID = result.SSID;
Log.w(TAG, "useSSID => " + useSSID);

connectToWifi(MainActivity.this, useSSID);
break;
}
else { Log.e(TAG, "NO result contains"); }

现在我如何查询我的:

ArrayList<ScanResult> mItems = new ArrayList<ScanResult>();


if (!signalStrength.containsKey(key)) {
signalStrength.put(key, i);
mItems.add(result);
} else {
int position = signalStrength.get(key);
ScanResult updateItem = mItems.get(position);
if (calculateSignalStength(wifiManager, updateItem.level) > calculateSignalStength(wifiManager, result.level)) {
mItems.set(position, updateItem);
}
}


if(mItems.contains("Open")) {
String useSSID = mItems #how to the name SSID name from mItems ???
Log.w(TAG, "useSSID => " + useSSID);

connectToWifi(MainActivity.this, useSSID);
break;
}
else { Log.e(TAG, "NO result contains"); }

=== 现在我的问题是如何从 mItems 获取 SSID 名称?谢谢你们的帮助。

最佳答案

这是相同的 fragment :

public string getValidSSID()
{
List<ScanResult> results = wifiManager.getScanResults();
HashMap<String,ScanResult> distinctNetworks = new HashMap<String, ScanResult>();
for(ScanResult scanResult : results)
{
if(scanResult.SSID.contains("Open"))
{
if(!distinctNetworks.containsKey(scanResult))
{
distinctNetworks.put(scanResult.SSID, scanResult);
}
else
{
if(WifiManager.compareSignalLevel(scanResult.level, distinctNetworks.get(scanResult.SSID).level)>0)
{
distinctNetworks.put(scanResult.SSID, scanResult);
}
}
}
}
Set<String> networks = distinctNetworks.keySet();// This will only contain one key which will be ths ssid with the max strength containing "open" in SSID
for (String s : networks) {
return s;
}
}

关于java - 如果 wifi 名称匹配,Android 以编程方式连接到 Wifi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30433922/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com