在Android 29上禁用WiFi

时间:2019-09-19 07:57:50

标签: android android-wifi wifimanager

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?

5 个答案:

答案 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