How to connect programmatically to wifi without netaccess in Android 31, meanwhile in device has mobile connection also

246 Views Asked by At

Sup guys, I'm working with app installed on harvester machines, each working in fields. It needs to connect on one of fragments to wifi without loosing connection to mobile. This wifi without access to internet - only for getting images from camera. How to get this directly without suggesting in 31 api? I'm totally stacked, look's like it impossible, but it working in a phone of my colleague in video-registrator app

1

There are 1 best solutions below

0
ArchkWay On

it worked for me:

    val connectivityManager: ConnectivityManager? = getSystemService(Context.CONNECTIVITY_SERVICE) as? ConnectivityManager
    val capabilities = connectivityManager?.getNetworkCapabilities(connectivityManager.activeNetwork)
    if (capabilities?.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) == true) {
        Toast.makeText(this,"wifi_success",Toast.LENGTH_SHORT).show()
    } else {
        Toast.makeText(this,"wifi_off",Toast.LENGTH_SHORT).show()
        startActivity( Intent(Settings.Panel.ACTION_WIFI))

    }
    val wifiManager: WifiManager? = getSystemService(Context.WIFI_SERVICE) as? WifiManager
    val needingWifi = wifiManager?.networkSuggestions?.firstOrNull()//for my case could be only one wifi

    val specifier: NetworkSpecifier =
        WifiNetworkSpecifier.Builder()
            .setSsidPattern(PatternMatcher(needingWifi?.ssid, PatternMatcher.PATTERN_PREFIX))
            .setWpa2Passphrase("12345678")
        .build()
    val  request: NetworkRequest =
        NetworkRequest.Builder()
            .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
            .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
            .setNetworkSpecifier(specifier)
            .build();
    val networkCallback: ConnectivityManager.NetworkCallback = object :ConnectivityManager.NetworkCallback() {
        override fun onAvailable(network: Network) {
            super.onAvailable(network)
            connectivityManager?.bindProcessToNetwork(network)
            Toast.makeText(this@MainActivity, "CONNECTED", Toast.LENGTH_SHORT).show()
        }
    }
    connectivityManager?.requestNetwork(request, networkCallback)