Да, вы можете использовать XOR для проверки логических значений на (не) равенство, хотя код менее интуитивно понятен: if (x ^ y)
против if (x != y)
.
Следующий код (в Kotlin) работает от API 21 до, по крайней мере, текущая версия API (API 29). Функция getWifiState () возвращает одно из 3 возможных значений для состояния сети WiFi: Отключите, EnabledNotConnected и Соединенный, которые были определены в классе Enum. Это позволяет принимать больше детализированных решений как информирование пользователя, чтобы включить WiFi или, если уже включено, соединиться с одной из доступных сетей. Но если все, что необходимо, будет булевской переменной, указывающей, подключен ли интерфейс WiFi к сети, то другая функция isWifiConnected () даст Вам это. Это использует предыдущий и сравнивает результат со Связанным.
Это вселено в некоторые предыдущие ответы, но пытающийся решить проблемы, представленные эволюцией Android API или медленно увеличивающаяся доступность IP V6. Прием должен был использовать:
wifiManager.connectionInfo.bssid != null
вместо:
Согласно документации: https://developer.android.com/reference/kotlin/android/net/wifi/WifiInfo.html#getbssid это возвратит пустой указатель если не подключенный к сети. И даже если у нас не будет разрешения получить действительное значение, то оно все еще возвратит что-то другое, чем пустой указатель, если мы будем соединены.
Также имеют следующее в виду:
На выпусках прежде android.os. Сборка. VERSION_CODES#N, этот объект должен только быть получен из Context#getApplicationContext (), а не из любого другого полученного контекста для предотвращения утечек памяти в рамках обработки вызовов.
В Декларации, не забывайте добавлять:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
Предложенный код:
class MyViewModel(application: Application) : AndroidViewModel(application) {
// Get application context
private val myAppContext: Context = getApplication<Application>().applicationContext
// Define the different possible states for the WiFi Connection
internal enum class WifiState {
Disabled, // WiFi is not enabled
EnabledNotConnected, // WiFi is enabled but we are not connected to any WiFi network
Connected, // Connected to a WiFi network
}
// Get the current state of the WiFi network
private fun getWifiState() : WifiState {
val wifiManager : WifiManager = myAppContext.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
return if (wifiManager.isWifiEnabled) {
if (wifiManager.connectionInfo.bssid != null)
WifiState.Connected
else
WifiState.EnabledNotConnected
} else {
WifiState.Disabled
}
}
// Returns true if we are connected to a WiFi network
private fun isWiFiConnected() : Boolean {
return (getWifiState() == WifiState.Connected)
}
}