Java 如果Wifi名称匹配,Android将以编程方式连接到Wifi

Java 如果Wifi名称匹配,Android将以编程方式连接到Wifi,java,android,wifi,android-wifi,wifimanager,Java,Android,Wifi,Android Wifi,Wifimanager,我想建立一个应用程序,检查所有可用的WiFi网络 如果网络的SSID与搜索键匹配,则连接到该网络;如果两个网络匹配,则连接到信号强度较高的网络 e、 g.SearchKey=“打开” 以下是检查所有wifi名称的代码: if (networkInfo.isConnected()) { ArrayList<ScanResult> mItems = new ArrayList<ScanResult>(); Lis

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

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

e、 g.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);
}
我被困在这里,如何做一个适当的检查,如果关键字“打开”退出,如果是这样,然后得到完整的名称和使用下面

在线示例如何连接

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"); }
ArrayList mItems=new ArrayList();
如果(!signalStrength.containsKey(键)){
信号强度。put(键,i);
添加(结果);
}否则{
int位置=信号强度。get(键);
ScanResult updateItem=mItems.get(位置);
if(calculateSignalStength(wifiManager,updateItem.level)>calculateSignalStength(wifiManager,result.level)){
设置(位置、更新项);
}
}
如果(mItems.包含(“打开”)){
字符串UseSID=mItems#如何从mItems中命名SSID名称???
w(标记“useSSID=>”+useSSID);
connectToWifi(MainActivity.this,useSSID);
打破
}
else{Log.e(标记,“无结果包含”);}
=现在我的问题是如何从mItems获取SSID名称?
谢谢大家的帮助。

这里有一个相同的片段:

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;
    }
}
公共字符串getValidSid()
{
List results=wifiManager.getScanResults();
HashMap distinctNetworks=新HashMap();
用于(扫描结果扫描结果:结果)
{
if(scanResult.SSID.contains(“打开”))
{
如果(!distinctNetworks.containsKey(扫描结果))
{
distinctNetworks.put(scanResult.SSID,scanResult);
}
其他的
{
if(WifiManager.compareSignalLevel(scansresult.level,distinctNetworks.get(scansresult.SSID.level))大于0)
{
distinctNetworks.put(scanResult.SSID,scanResult);
}
}
}
}
Set networks=distinctNetworks.keySet();//这将只包含一个密钥,该密钥将是ssid,最大强度在ssid中包含“open”
用于(字符串s:网络){
返回s;
}
}

if(result.SSID.contains(“Open”)
?我不明白这部分-if(!result.SSID.isEmpty()){if(result.SSID.contains(“Open”){useSSID=如何获取包含“Open”的完整SSID}你好,谢谢你的帮助。我已经用代码更新了我的问题。
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;
    }
}