Reputation: 12293
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.
How can we disable WiFi on Android 29?
Upvotes: 10
Views: 12034
Reputation: 927
This is a much simpler way of detecting the operating system version:
if (Build.VERSION.SDK_INT<Build.VERSION_CODES.Q)
wifiManager.setWifiEnabled(status);
else
{
Intent panelIntent = new Intent(Settings.Panel.ACTION_WIFI);
startActivityForResult(panelIntent,1);
}
Basically, if the OS version is less than Android Q, use the WifiManager class object to enable/disable the use of Wi-Fi; otherwise, use implicit Intents to disable Wi-Fi.
Upvotes: 4
Reputation: 158
solved!
private void setWifiEnabled(boolean enabled) {
try {
Runtime.getRuntime().exec(new String[] { "su", "-c", "svc wifi", enabled ?
"enable" :
"disable" });
}
catch (IOException e) {
e.printStackTrace();
}
}
happily works on api 29
obviously, this requires root
does NOT require android.permission.CHANGE_WIFI_STATE
Upvotes: 3
Reputation: 376
Android Q has restricted this and developers can't disable wifi programmatically. your app will continue to work and can disable wifi if your targetSdkVersion <= 28
Upvotes: 1
Reputation: 30715
In Android Q (Android 10, API level 29) you can't enable/disable wifi programmatically anymore. Use Settings Panel to toggle wifi connectivity:
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*/ }
}
Upvotes: 4
Reputation: 20724
Toggling WiFi will not be allowed by apps starting from Android Q according to Google.
Here's the issue on their issuetracker: https://issuetracker.google.com/issues/128554616
Upvotes: 0