Включить отключение Wi-Fi на Android 29

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?


person user924    schedule 19.09.2019    source источник
comment
это предполагаемое поведение и не будет исправлено, это отстой, android 10 в целом отстой. Больше всего раздражает объем хранилища commonsware.com/ блог / 2019/03/29 /   -  person Pemba Tamang    schedule 19.09.2019


Ответы (5)


В 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*/ }
}
person Sergey    schedule 18.04.2020

Android Q ограничил это, и разработчики не могут программно отключить Wi-Fi. ваше приложение продолжит работать и может отключить Wi-Fi, если ваш targetSdkVersion ‹= 28

person Amin Rezaei    schedule 18.04.2020

Это гораздо более простой способ определить версию операционной системы:

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.

person The EasyLearn Academy    schedule 05.02.2021

Согласно Google, переключение Wi-Fi не будет разрешено приложениями, начиная с Android Q.

Проблема с их трекером выдачи: https://issuetracker.google.com/issues/128554616

person Saurabh Thorat    schedule 19.09.2019

решено!

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

person hundreAd    schedule 22.07.2020
comment
Другой вариант - на stackoverflow.com/a/63262649/2677764. - person Shredder; 05.08.2020