簡體   English   中英

在 Android 29 上啟用禁用 WiFi

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM