Как включить/выключить Wi-Fi программно?
Не могу решить проблему с включением/выключением Wi-Fi программно в Android.
Прописал permissions:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
Код, который использую для включения Wi-Fi:
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled(true);
Ошибок в логах никаких нет, программа не вылетает, и при вызове wifiManager.setWifiEnabled(true) ничего не происходит.
В чем может быть проблема?
Проверял как на своем телефоне, так и на эмуляторе — результат один и тот же.
Ответы (1 шт):
Вы не уточнили какая версия андроида на ваших тестовых устройствах. Вы используете такой метод:
public boolean WifiManager.setWifiEnabled (boolean enabled)
то что пишется про него в документации:
This method was deprecated in API level 29. Starting with Build.VERSION_CODES#Q, applications are not allowed to enable/disable Wi-Fi. Compatibility Note: For applications targeting Build.VERSION_CODES.Q or above, this API will always return false and will have no effect. If apps are targeting an older SDK ( Build.VERSION_CODES.P or below), they can continue to use this API.
как вариант сделать проверку на версию андроида:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
val panelIntent = Intent(Settings.Panel.ACTION_INTERNET_CONNECTIVITY)
startActivityForResult(panelIntent, 0)
} else {
(this.context?.getSystemService(Context.WIFI_SERVICE) as? WifiManager)?.apply { isWifiEnabled = true /*or false*/ }
}
UPDATE:
так как startActivityForResult тоже Deprecated, вместо него нужно использовать:
var resultLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_CANCELED) {
}
}
итоговая версия для Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q:
resultLauncher.launch(Intent(Settings.Panel.ACTION_INTERNET_CONNECTIVITY))