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
Asked
Active
Viewed 189 times
1 Answers
0
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)

ArchkWay
- 119
- 1
- 6