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