taontech / githublog

一个基于github issues的博客系统,实时呈现,零依赖,零代码部署,不用打包不用上线。
4 stars 1 forks source link

连接wifi的新的方式 #76

Open taontech opened 1 year ago

taontech commented 1 year ago

官网WiFi连接的方式并不能适应所有的系统版本,下面是利用NetworkRequest的方法。

private fun android10andMoreVersionsWithoutOuterInternet(
        wifiSSID: String,
        wifiPassword: String
    ) {
        // Android 10 (API level 29) -- Android Q (Android 10)
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            val wifiManager =
                this.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager

            val wifiNetworkSpecifier = WifiNetworkSpecifier.Builder()
                .setSsid(wifiSSID)
                .setWpa2Passphrase(wifiPassword)
                .build()

            val networkRequest = NetworkRequest.Builder()
                .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
                .setNetworkSpecifier(wifiNetworkSpecifier)
                .build()
            val connectivityManager =
                this.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager

            val networkCallback = object : ConnectivityManager.NetworkCallback() {
                override fun onAvailable(network: Network) {
                    Log.d("NETWORK", "Network available")
                    super.onAvailable(network)
                }

                override fun onUnavailable() {
                    Log.d("NETWORK", "Network unavailable")
                    super.onUnavailable()
                }

                override fun onLosing(network: Network, maxMsToLive: Int) {
                    Log.d("NETWORK", "onLosing")
                    super.onLosing(network, maxMsToLive)
                }

                override fun onLost(network: Network) {
                    Log.d("NETWORK", "onLost")
                    super.onLost(network)
                }

            }
            connectivityManager.requestNetwork(networkRequest, networkCallback)
            val builder = NetworkRequest.Builder()
            builder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
            connectivityManager.registerNetworkCallback(networkRequest, networkCallback) // For listen
        }

    }
taontech commented 1 year ago

只有这种方法能够成功,在华为和一加上都可以正常连接,但是此种方法建立的连接只能建立连接的app使用,其他qpp是无法通过这种方式上网的。