Android 10以上连接指定WiFi问题

测试手机:

小米手机

Android版本:

12

问题描述:

使用测试手机扫描二维码得到WiFi的ssid和密码,然后使用Android官方文档上的10以上的点对点连接方案,设备连接上了一个ssid一样的WiFi,但是查看WiFi列表时会发现存在两个名称一样的WiFi,分别查看详情,连接上的WiFi并没有很多详细的信息,而另一个WiFi可以查看很多详细的信息,例如mac地址等。

问题相关代码:
 val specifier: NetworkSpecifier = WifiNetworkSpecifier.Builder()
                    .setSsidPattern(PatternMatcher(wifiName, PatternMatcher.PATTERN_LITERAL))
                    .setWpa2Passphrase(wifPassword)
                    .build()
                val request = NetworkRequest.Builder()
                    .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
                    .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
                    .setNetworkSpecifier(specifier)
                    .build()
                val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
                val networkCallback: ConnectivityManager.NetworkCallback = object : ConnectivityManager.NetworkCallback() {
                    override fun onAvailable(network: Network) {
                        super.onAvailable(network)
                        // do success processing here..x
                        
                    }

                    override fun onUnavailable() {
                        super.onUnavailable()
                        // do failure processing here..
                        ToastUtils.showShort("无线连接失败,请手动连接")
                        connectivityManager.unregisterNetworkCallback(this);
                    }
                }

                connectivityManager.requestNetwork(request, networkCallback)
运行结果及报错内容:

在WiFi列表中显示成功连接了指定WiFi,但是是一个假的WiFi,真实的WiFi没有连接上、无报错内容。

我的解答思路和尝试过的方法 :

因为官方文档提供的方式有两个,一、适用于互联网连接的 WLAN 建议 API,二、适用于对等连接的 WLAN 网络请求 API,以上代码使用的是第二种方法。尝试过第一种方法,但是当调用完方法,界面会显示是否允许建议的弹窗,无论点击哪个后都没有反应了。

我想要达到的结果:

能有一种方法连接正确的指定WiFi。

.setSsidPattern(PatternMatcher(wifiName, PatternMatcher.PATTERN_PREFIX))

试试