Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓-如何扫描接入点并选择最强信号?_Android_Signals_Wifi_Wifimanager_Network Scan - Fatal编程技术网

Android 安卓-如何扫描接入点并选择最强信号?

Android 安卓-如何扫描接入点并选择最强信号?,android,signals,wifi,wifimanager,network-scan,Android,Signals,Wifi,Wifimanager,Network Scan,我目前正在尝试用Android编写一个类,该类将扫描接入点,计算哪个接入点具有最佳信号,然后连接到该接入点 因此,该应用程序将能够在移动中进行扫描,并在移动中连接到新的接入点 我有扫描和计算的最佳信号工作 但在连接到最佳接入点时,我遇到了麻烦 似乎enableNetwork(netid,OtherStrueValse)是连接到接入点的唯一方法,但这会导致问题,因为从扫描结果来看,我无法获得信号最强的接入点id 这是我的代码: 当我尝试使用addNewAccessPoint(ScanResu

我目前正在尝试用Android编写一个类,该类将扫描接入点,计算哪个接入点具有最佳信号,然后连接到该接入点

因此,该应用程序将能够在移动中进行扫描,并在移动中连接到新的接入点

我有扫描和计算的最佳信号工作

但在连接到最佳接入点时,我遇到了麻烦

似乎enableNetwork(netid,OtherStrueValse)是连接到接入点的唯一方法,但这会导致问题,因为从扫描结果来看,我无法获得信号最强的接入点id

这是我的代码:




当我尝试使用addNewAccessPoint(ScanResult ScanResult)时,它只是将另一个AP添加到设置应用程序的列表中,并使用与具有最佳信号的AP相同的名称,因此我最终会加载重复的AP,而不是实际附加到它们

有人能给我指出更好的解决方案吗?

只要改变就行了

boolean b = mainWifi.enableNetwork(res, false);


更直截了当地回答你的问题。首先,确定具有最佳信号强度的扫描结果。一旦你有,你也应该得到wifi配置列表已经在设备上,并确保扫描结果与最强的信号尚未配置的设备。如果是,只需启用它,如果不是,按原样创建一个新的。这将帮助您避免重复配置

private int findExistingNetworkConfig(String ssid) {
    if (ssid != null && !ssid.isEmpty()) {
        WifiManager wifiManager = (WifiManager) mContextRef.get()
                .getSystemService(Context.WIFI_SERVICE);
        for (WifiConfiguration wifiConfig : wifiManager
                .getConfiguredNetworks()) {
            if (ssid.equals(wifiConfig.SSID)) {
                return wifiConfig.networkId;
            }
        }
    }
    // Didn't find a matching network ssid
    return -1;
}
是的,启用网络时请确保使用“true”参数。这将有助于确保您连接到所需的网络

wifiManager.enableNetwork(mNetID, true);
boolean b = mainWifi.enableNetwork(res, false);
boolean b = mainWifi.enableNetwork(res, true); 
private int findExistingNetworkConfig(String ssid) {
    if (ssid != null && !ssid.isEmpty()) {
        WifiManager wifiManager = (WifiManager) mContextRef.get()
                .getSystemService(Context.WIFI_SERVICE);
        for (WifiConfiguration wifiConfig : wifiManager
                .getConfiguredNetworks()) {
            if (ssid.equals(wifiConfig.SSID)) {
                return wifiConfig.networkId;
            }
        }
    }
    // Didn't find a matching network ssid
    return -1;
}
wifiManager.enableNetwork(mNetID, true);