[英]Android: How to Enable/Disable Wifi or Internet Connection Programmatically
[英]Enable Disable WiFi on 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。
我们如何在 Android 29 上禁用 WiFi?
在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*/ }
}
Android Q 对此进行了限制,开发人员无法以编程方式禁用 wifi。 如果您的 targetSdkVersion <= 28,您的应用程序将继续工作并且可以禁用 wifi
这是检测操作系统版本的一种更简单的方法:
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 class object 来启用/禁用 Wi-Fi 的使用; 否则,使用隐式 Intent 禁用 Wi-Fi。
根据 Google 的说法,从 Android Q 开始的应用程序将不允许切换 WiFi。
这是他们的问题跟踪器上的问题: https://issuetracker.google.com/issues/128554616
解决了!
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.