首页 > 解决方案 > 在没有 Internet 的网络上保持连接

问题描述

我正在尝试连接到没有可用 Internet 连接的 Android 10 上的 Wi-Fi 热点。问题是,一旦我连接并且设备检测到没有连接,它就会回到另一个可用互联网的连接。

在查找了我能做什么之后,我发现了这段代码,据说它会强制留下:

val manager = applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
val mWifiLock: WifiManager.WifiLock = manager.createWifiLock(WifiManager.WIFI_MODE_FULL, "wifiLock")
if (! mWifiLock.isHeld) {
    mWifiLock.acquire()
}

不幸的是,该代码已被弃用并且不再工作。到目前为止,我发现的唯一可行的解​​决方案是禁用其他网络。我还在 StackOverflow 上发现了具有完全相同问题的其他线程,但这些线程是在 1 年前创建的,所以我想我可能会再问一次。

有谁知道我可以保持连接到这个网络的更新方式?

这是我用来连接到热点顺便说一句的代码:

val wifiNetworkSpecifier = WifiNetworkSpecifier.Builder()
        .setSsid(ssid)
        .setWpa2Passphrase(pass)
        .build()

val wifiRequest = NetworkRequest.Builder()
        .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
        .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
        .setNetworkSpecifier(wifiNetworkSpecifier)
        .build()

val connectivity = applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
val networkCallback = object : ConnectivityManager.NetworkCallback() {
    override fun onUnavailable() {
        super.onUnavailable()
    }

    override fun onLosing(network: Network, maxMsToLive: Int) {
        super.onLosing(network, maxMsToLive)
        listener(false)
    }

    override fun onLost(network: Network) {
        super.onLost(network)
        listener(false)
    }

    override fun onAvailable(network: Network) {
        super.onAvailable(network)
        
        connectivity?.bindProcessToNetwork(network)
        //Code to force-stay
        listener(true)
    }
}

connectivity?.requestNetwork(wifiRequest, networkCallback)

标签: androidkotlinandroid-10.0

解决方案


推荐阅读