赞
踩
在Android10之前应用内连接wifi是调用addNetwork和enableNetwork。但在Android10以后以上方法不会生效。
在Android10及以上,官方提供了以下应用内连接wifi的方式:文档
- val specifier = WifiNetworkSpecifier.Builder()
- .setSsidPattern(PatternMatcher("test", PatternMatcher.PATTERN_PREFIX))
- .setBssidPattern(MacAddress.fromString("10:03:23:00:00:00"), MacAddress.fromString("ff:ff:ff:00:00:00"))
- .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 = object : ConnectivityManager.NetworkCallback() {
- ...
- override fun onAvailable(network: Network?) {
- // do success processing here..
- }
-
- override fun onUnavailable() {
- // do failure processing here..
- }
- ...
- }
- connectivityManager.requestNetwork(request, networkCallback)
- ...
- // Release the request when done.
- connectivityManager.unregisterNetworkCallback(networkCallback)
但是注意!这段代码在国内的安卓机来说根本没什么鸟用,有些能弹出连接提示框,有些自动给你连接失败,关键是:就算连接成功后,也根本无法访问外部网络。
有人说在networkCallback的onAvailable方法加上
connectivityManager.bindProcessToNetwork(network);
我可以告诉你,一样无效,谷歌和国内的手机厂商没有提供解决方案,可能没重视。
测试过在鸿蒙系统可以做到,但也不稳定。
基于以上方案无解,我又看到了一个关于WifiNetworkSuggestion的介绍:
运行 Android 10 (API 级别 29) 或更高版本 的设备允许您的应用添加设备的网络凭据,以自动连接到 WLAN 接入点。您可以使用 WifiNetworkSuggestion 就连接到哪个网络提供建议。平台最终会根据您的应用和其他应用的建议,选择要接受的接入点。
1.如果你不是非得校验wifi的正确性,那么弹窗提示用户手动跳转到wifi设置界面,让用户手动连接指定wifi。
- val intent = Intent(Settings.ACTION_WIFI_SETTINGS)
- intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
- startActivity(intent)
2.既然是安卓10以上的问题,那么只能不使用10以上的SDK
- compileSdkVersion 28
- targetSdkVersion 28
这个治标不治本,无可奈何的选择。
经测试MIUI 14系统已经可以支持以上连接wifi的代码,看来手机厂商也在逐步解决这个问题
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。