我正试图让我的应用程序连接到一个WiFi AP,使用这样的代码为互联网提供WifiNetworkSpecifier。但它总是在NetworkCallback中调用NetworkCallback。
private val callback: ConnectivityManager.NetworkCallback = object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {
super.onAvailable(network)
}
override fun onLost(network: Network) {
super.onLost(network)
}
override fun onLosing(network: Network, maxMsToLive: Int) {
super.onLosing(network, maxMsToLive)
}
override fun onUnavailable() {
super.onUnavailable()
}
override fun onCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities) {
super.onCapabilitiesChanged(network, networkCapabilities)
}
override fun onLinkPropertiesChanged(network: Network, linkProperties: LinkProperties) {
super.onLinkPropertiesChanged(network, linkProperties)
}
override fun onBlockedStatusChanged(network: Network, blocked: Boolean) {
super.onBlockedStatusChanged(network, blocked)
}
}
val networkSpecifier: NetworkSpecifier = WifiNetworkSpecifier.Builder()
.setSsid("SsidName")
.setWpa2Passphrase("wifipassword")
.build()
val networkRequest: NetworkRequest = NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.setNetworkSpecifier(networkSpecifier)
.build()
connectivityManager.requestNetwork(networkRequest, callback, 100000)发布于 2022-07-30 18:46:45
WifiNetworkSpecifier仅用于连接本地Wifi网络,例如,用于设置IoT设备,如此处所确认的:https://developer.android.com/guide/topics/connectivity/wifi-bootstrap。

因此,如果你是.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET),安卓总是什么都不做,打电话给onUnavailable。
您可以在Android平台代码中看到为什么:https://cs.android.com/android/platform/superproject/+/master:packages/modules/Wifi/service/java/com/android/server/wifi/WifiNetworkFactory.java;drc=08124f52b883c61f3e17bc57dc28eca4c7f7bb72;l=487
LogCat中的消息将是E/WifiNetworkFactory: Request with wifi network specifier cannot contain NET_CAPABILITY_INTERNET. Rejecting
如果你想上网,你需要删除.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)线(这很有道理,哇!)并将connectivityManager.bindProcessToNetwork(network)添加到onAvailable中,如this answer中所述。注意,这是一个小黑客,将启用互联网通过Wifi为您的应用程序。
https://stackoverflow.com/questions/73178257
复制相似问题