首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么具有能力的WifiNetworkSpecifier NET_CAPABILITY_INTERNET总是返回onUnavailable?

为什么具有能力的WifiNetworkSpecifier NET_CAPABILITY_INTERNET总是返回onUnavailable?
EN

Stack Overflow用户
提问于 2022-07-30 18:46:45
回答 1查看 293关注 0票数 0

我正试图让我的应用程序连接到一个WiFi AP,使用这样的代码为互联网提供WifiNetworkSpecifier。但它总是在NetworkCallback中调用NetworkCallback。

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

发布于 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为您的应用程序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73178257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档