【问题标题】:How to programatically turn on wifi when aeroplane(airplane) mode is on in Android?在Android中打开飞机(飞机)模式时如何以编程方式打开wifi?
【发布时间】:2019-01-23 07:01:37
【问题描述】:

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

【问题讨论】:

  • 到目前为止,您研究或尝试了什么?
  • 检查了这个 WifiManager.setWifiEnabled(true) 方法,当设备在飞机上时它返回 false。
  • 您的应用是否具有更改 wifi 状态所需的权限?
  • 是的,我有 CHANGE_WIFI_STATE、ACCESS_WIFI_STATE 和 WRITE_SETTINGS 权限。

标签: android android-9.0-pie


【解决方案1】:

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

boolean retVal = mWifiManager.setWifiEnabled(true);

在设备处于飞行模式时总是返回 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。如链接中所述,您可以通过在飞行模式关闭时添加以下代码将事情恢复原状。

Runtime.getRuntime().exec("adb shell 设置删除全局airplane_mode_radios");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    • 2022-06-30
    • 1970-01-01
    相关资源
    最近更新 更多