【发布时间】:2015-05-25 08:18:17
【问题描述】:
我想构建一个应用,检查所有可用的 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 名称? 谢谢大家的帮助。
【问题讨论】:
-
if(result.SSID.contains("Open"))? -
我不明白这部分 - if (!result.SSID.isEmpty()) { if(result.SSID.contains("Open")) { useSSID = How to get the full SSID包含“打开”}
-
嗨,谢谢你的帮助。我已经用代码更新了我的问题。
标签: java android wifi android-wifi wifimanager