taontech / githublog

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

安卓app连接wifi代码 #67

Open taontech opened 1 year ago

taontech commented 1 year ago
private fun android10andMoreVersionsWithoutOuterInternet(
        scanResult: ScanResult,
        wifiSSID: String,
        wifiPassword: String,
        capabilities: 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)
                //.setSsidPattern(PatternMatcher(wifiSSID, PatternMatcher.PATTERN_PREFIX))
                .setWpa2Passphrase(wifiPassword)
                .build()

            val networkRequest = NetworkRequest.Builder()
                .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
                //.removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
                //.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
                //.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED)
                .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)

                    // To make sure that requests don't go over mobile data
                    connectivityManager.bindProcessToNetwork(network)

                    //unregister network callback
                    //connectivityManager.unregisterNetworkCallback(this)
                   // connectivityManager.bindProcessToNetwork(null)

                    gotoNextScreen(scanResult, wifiManager)

                }

                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.bindProcessToNetwork(null)
                    //connectivityManager.unregisterNetworkCallback(this)
                }

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

    }