我正在使用新的 API 29 将设备连接到 Android 10 设备中的 wifi 网络:
private val connectivityManager: ConnectivityManager by inject()
override fun connectToNetwork(ssid: String, password: String) {
val networkRequest = buildNetworkRequest(ssid, password)
val networkCallback =
object : NetworkCallback() {
override fun onAvailable(network: Network) {
super.onAvailable(network)
Timber.d("Connected to network $ssid")
}
override fun onUnavailable() {
super.onUnavailable()
Timber.e("Unable to connect to network $ssid")
}
}
connectivityManager.requestNetwork(networkRequest, networkCallback, CONNECTION_TIME_OUT)
}
private fun buildNetworkRequest(ssid: String, password: String) =
NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.setNetworkSpecifier(buildWifiNetworkSpecifier(ssid, password))
.build()
private fun buildWifiNetworkSpecifier(ssid: String, password: String) =
WifiNetworkSpecifier.Builder()
.setSsid(ssid)
.setWpa2Passphrase(password)
.build()
将出现一个对话框,其中包含“要使用的设备”,其中列出了指定的 wifi 网络。该对话框有两个“取消”和“连接”按钮。当我点击“连接”时,设备连接到 wifi 网络(我可以在系统设置中看到)并且连接按钮被禁用。
但是对话框并没有消失,并且没有调用 requestNetwork 回调中的任何方法。最终我达到了指定的超时时间,另一个对话框出现了“出现问题。应用程序已取消选择设备的请求”。
这里发生了什么?我想连接到网络并调用回调中的“onAvailable”或“onUnavailable”方法。