如何在 Android 中打开飞机(飞机)模式时以编程方式打开 wifi?

How to programatically turn on wifi when aeroplane(airplane) mode is on in Android?

我正在开发 wifi 搜索应用程序。每当设备处于飞行模式时,wifi 都会自动关闭。我发现即使设备处于飞行模式,系统应用程序也可以打开 wifi。我正在 Android 上测试它 9. 如何让我的应用程序能够打开 wifi?

在android 9中,当设备处于飞行模式或网络共享热点时,您无法以编程方式打开wifi。在这种情况下,

boolean retVal = mWifiManager.setWifiEnabled(true);

始终returns false,因为设备处于飞行模式。但我发现了一种不道德的方式来做到这一点。不确定这样做是否好。适合我。

if(myWifiManager.isWifiEnabled()){
        System.out.println("Toggle Wifi Enabled going to disable");
        myWifiManager.setWifiEnabled(false);
    }
    else{
        System.out.println("Wifi Disabled going to enable ");
        if(Settings.System.getInt(context.getContentResolver(),Settings.System.AIRPLANE_MODE_ON, 0) != 0){
             Runtime.getRuntime().exec("adb shell settings put global airplane_mode_radios cell,nfc,wimax,bluetooth");
        }
        myWifiManager.setWifiEnabled(true);
        System.out.println("WI: "+myWifiManager.isWifiEnabled());
    }

adb 命令的解释是 here。正如 link 中提到的,您可以在飞行模式关闭时通过添加以下代码将事情恢复到原来的状态。

Runtime.getRuntime().exec("adb shell settings delete global airplane_mode_radios");