public boolean WifiManager.setWifiEnabled (boolean enabled)
在API级别29中不推荐使用此方法。 Build.VERSION_CODES#Q,不允许应用程序启用/禁用 无线上网。兼容性说明:针对应用 Build.VERSION_CODES.Q或更高版本,此API将始终返回false和 不会有任何效果。如果应用程序针对的是旧版SDK( Build.VERSION_CODES.P或更低版本),他们可以继续使用此API。
我们如何在Android 29上禁用WiFi?
答案 0 :(得分:1)
在 Android Q(Android 10,API级别29)中,您无法再通过编程方式启用/禁用wifi。使用设置面板来切换wifi连接:
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*/ }
}
答案 1 :(得分:1)
这是一种更简单的检测操作系统版本的方法:
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的使用;否则,使用隐式 Intent 禁用 Wi-Fi。
答案 2 :(得分:0)
根据Google的说法,从Android Q开始的应用将不允许切换WiFi。
以下是他们的问题跟踪工具上的问题:https://issuetracker.google.com/issues/128554616
答案 3 :(得分:0)
Android Q对此进行了限制,并且开发人员无法以编程方式禁用wifi。如果您的targetSdkVersion <= 28
,您的应用将继续运行并可以禁用wifi答案 4 :(得分:0)
解决了!
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