public boolean WifiManager.setWifiEnabled (boolean enabled)
Этот метод устарел на уровне API 29. Начиная с Build.VERSION_CODES # Q, приложениям не разрешено включать / отключать Wi-Fi. Примечание о совместимости: для приложений, предназначенных для Build.VERSION_CODES.Q или выше, этот API всегда будет возвращать false и не будет иметь никакого эффекта. Если приложения нацелены на более старый SDK (Build.VERSION_CODES.P или ниже), они могут продолжать использовать этот API.
Как мы можем отключить Wi-Fi на Android 29?
Ответ 1 · рейтинг 1 · Sergey
В Android Q (Android 10, уровень API 29) вы больше не можете программно включать / отключать Wi-Fi. Используйте панель настроек, чтобы переключить подключение к Wi-Fi:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
val panelIntent = Intent(Settings.Panel.ACTION_INTERNET_CONNECTIVITY)
startActivityForResult(panelIntent, 0)
} else {
// add appropriate permissions to AndroidManifest file (see https://stackoverflow.com/questions/3930990/android-how-to-enable-disable-wifi-or-internet-connection-programmatically/61289575)
(this.context?.getSystemService(Context.WIFI_SERVICE) as? WifiManager)?.apply { isWifiEnabled = true /*or false*/ }
}
Ответ 2 · рейтинг 1 · Amin Rezaei
Android Q ограничил это, и разработчики не могут программно отключить Wi-Fi. ваше приложение продолжит работать и может отключить Wi-Fi, если ваш targetSdkVersion ‹= 28
Ответ 3 · рейтинг 1 · The EasyLearn Academy
Это гораздо более простой способ определить версию операционной системы:
if (Build.VERSION.SDK_INT<Build.VERSION_CODES.Q)
wifiManager.setWifiEnabled(status);
else
{
Intent panelIntent = new Intent(Settings.Panel.ACTION_WIFI);
startActivityForResult(panelIntent,1);
}
Обычно, если версия ОС ниже, чем Android Q, используйте объект класса WifiManager для включения / отключения использования Wi-Fi; в противном случае используйте неявные намерения для отключения Wi-Fi.
Ответ 5 · рейтинг -1 · hundreAd
решено!
private void setWifiEnabled(boolean enabled) {
try {
Runtime.getRuntime().exec(new String[] { "su", "-c", "svc wifi", enabled ?
"enable" :
"disable" });
}
catch (IOException e) {
e.printStackTrace();
}
}
счастливо работает на api 29
очевидно, для этого требуется root
НЕ требует android.permission.CHANGE_WIFI_STATE