gpt4 book ai didi

android - 连接到特定的 wifi 有时会在 android 上失败

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:31:31 27 4
gpt4 key购买 nike

我正在创建一个应用程序,它可以在 ListView 中列出所有可用的 wifi。如果我选择列表中的一个 wifi,它之前缓存在 List<WifiConfiguration> list = wifiManager.getConfiguredNetworks(); 中然后它应该连接到它。如果WifiConfiguration列表不包含所选的 wifi,则什么也不会发生。我的问题是,有时我从列表中选择一个 wifi(我确定它在 WifiConfiguration 列表中),但它没有连接到它。相反,它会连接回之前连接的 wifi。经过一些尝试(一次又一次地选择相同的 wifi),它终于连接到了它。这并不总是发生,只是有时会发生。可能是什么问题?这是我的代码 fragment :

// Go through all the cached wifis and check if the selected GoPro was cached before
for (WifiConfiguration config : configurations) {
// If it was cached connect to it and that's all
if (config.SSID != null && config.SSID.equals("\"" + mDrawerListView.getAdapter().getItem(position) + "\"")) {
// Log
Log.i("onReceive", "Connecting to: " + config.SSID);
mWifiManager.disconnect();
mWifiManager.enableNetwork(config.networkId, true);
mWifiManager.reconnect();
break;
}
}

最佳答案

事情是这样的。基本上,您可以告诉操作系统禁用网络,也可以告诉操作系统启用网络,但不可能告诉操作系统连接到哪个网络。

如果范围内有多个 WiFi 接入点都在设备上配置(并且都处于 enabled 状态),操作系统将决定连接到哪个。

强制操作系统连接到范围内的网络之一而不是另一个网络的唯一方法是在您不想要的范围内的网络上调用 disableNetwork()连接到。

让我们逐行检查您的代码:

mWifiManager.disconnect();

上面的行告诉操作系统断开与当前连接的 WiFi 接入点的连接。

mWifiManager.enableNetwork(config.networkId, true);

如果设备之前处于disabled 状态,上面的行告诉设备将网络设置为enabled 状态。

mWifiManager.reconnect(); 

来自 the documentation :

Reconnect to the currently active access point, if we are currently disconnected. This may result in the asynchronous delivery of state change events.

因此,当您说相反,它会连接回之前连接的 wifi。,它的工作完全符合预期,因为操作系统正在重新连接到它认为当前 Activity 的访问权限点

如果您真的想禁用其他网络以便操作系统连接到您刚刚单击的网络,您可以这样做:

// Go through all the cached wifis and check if the selected GoPro was cached before

WifiInfo info = mWifiManager.getConnectionInfo(); //get WifiInfo
int id = info.getNetworkId(); //get id of currently connected network

for (WifiConfiguration config : configurations) {
// If it was cached connect to it and that's all
if (config.SSID != null && config.SSID.equals("\"" + mDrawerListView.getAdapter().getItem(position) + "\"")) {
// Log
Log.i("onReceive", "Connecting to: " + config.SSID);

mWifiManager.disconnect();

mWifiManager.disableNetwork(id); //disable current network

mWifiManager.enableNetwork(config.networkId, true);
mWifiManager.reconnect();
break;
}
}

关于android - 连接到特定的 wifi 有时会在 android 上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29811421/

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