Вы можете указать, к какой сети подключаться, используя следующий код:
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.Q) {
val cm = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val networkRequest = NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.setNetworkSpecifier(
WifiNetworkSpecifier.Builder()
.setSsid("My ssid")
.build()
)
.build()
cm.requestNetwork(networkRequest, object: ConnectivityManager.NetworkCallback() {
override fun onUnavailable() {
Log.d("TEST", "Network unavailable")
}
override fun onAvailable(network: Network) {
Log.d("TEST", "Network available")
}
})
}
При этом используется метод ConnectivityManager networkRequest для запроса сети с определенным SSID.
Этот метод требует от вызывающего абонента иметь либо разрешение Manifest.permission.CHANGE_NETWORK_STATE
, либо возможность изменять системные настройки, как определено Settings.System.canWrite(Context)
.
. См. Класс NetworkCallback для получения дополнительной документации о том, чтоинформацию, которую вы можете получить.
(редактирование: пропущено добавление типа транспорта.)
Дальнейшее редактирование: мне нужно было использовать .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
, чтобы заставить его работать должным образом. Потому что в WifiNetworkSpecifier
можно использовать только для запроса локальной сети Wi-Fi (т. Е. Без возможности подключения к Интернету)
В соответствии с документами
Это дает мне запрос на всплывающее окно с устройствами, но затем, в конце концов, показывает мне сеть Wifi, о которой я просил.