通过ADB打开飞行模式

33

我已经四处寻找,但没有找到确切的答案。我希望能找到一种不需要GUI界面的通过ADB切换飞行模式的方法。我已经找到了一种调用菜单然后使用键盘事件开启飞行模式的方法,但由于需要考虑可能会发生的UI布局变化,这种方法只是一个临时解决方案。

我开始觉得没有办法通过意图(intent)来简单地切换飞行模式的开关,但如果你有任何信息,我将非常感激。


你可以查看这个链接https://dev59.com/SHnZa4cB1Zd3GeqPp2wN#26906472 - Anand
3
请问您能接受查尔斯的任何答案吗?(我猜G的答案最好?)这将有助于其他人更快地找到答案,也会产生一些其他后果(例如,您可以使用该问题作为另一个问题的重复,如果它有被接受的答案)。 - David Ferenczy Rogožan
对于最新的设备,例如Android 13,请参考wuseman的回答,使用adb shell cmd connectivity airplane-mode enable命令。 - nealmcb
18个回答

2
自从Nougat以后广播命令不再起作用,我建议使用类似以下的内容:
adb shell "input keyevent KEYCODE_WAKEUP;input keyevent KEYCODE_MOVE_HOME;am start -a android.settings.AIRPLANE_MODE_SETTINGS;sleep 0.5;input keyevent KEYCODE_ENTER;pm clear com.android.settings;input keyevent KEYCODE_HOME"

这在三星S7上可以正常运行。


1

威廉的答案是对我最有用的 -> Android 5.0棒棒糖。然而,有时它不能切换,因为它在完全加载设置活动之前尝试进行切换。

所以我让终端休眠0.1秒。并且我添加了按返回键退出设置。

adb shell am start -a android.settings.AIRPLANE_MODE_SETTINGS
adb shell input keyevent 19 ; sleep 0.1; adb shell input keyevent 23; sleep 0.3; adb shell input keyevent 4;
echo "Toggled airplane mode";

这真的很糟糕,因为它依赖于用户界面及其行为。如果出现小延迟或意外对话框,你就会遇到麻烦(或者你的设备会遇到麻烦)。我永远不会依赖于那个。有更清晰的方法来实现它。 - David Ferenczy Rogožan

1
使用以下命令启动“设置”>“无线网络”,切换“飞行模式”并返回(按“返回”键):
  • Windows/DOS: adb shell am start -a android.settings.AIRPLANE_MODE_SETTINGS & adb shell input keyevent 19 & adb shell input keyevent 23 & adb shell input keyevent 4
  • Unix/Linux: adb shell am start -a android.settings.AIRPLANE_MODE_SETTINGS ; adb shell input keyevent 19 ; adb shell input keyevent 23 ; adb shell input keyevent 4
在三星Galaxy S(Android OS 2.3.3)上测试通过。

1

以下是我的实践经验:

adb shell settings put global airplane_mode_on 1
adb shell su -c am broadcast -a android.intent.action.AIRPLANE_MODE

为关闭功能,只需在第一条命令中传递0即可。


0
如果手机已经被root过了,那么你可以使用这个命令。同时,如果使用Magisk,必须给shell赋予"su"权限。

开启飞行模式

adb -s ZY32234G3V shell "su -c 'input keyevent KEYCODE_WAKEUP;input keyevent KEYCODE_MOVE_HOME;settings put global airplane_mode_on 1;am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true'"

关闭飞行模式

adb -s ZY32234G3V shell "su -c 'input keyevent KEYCODE_WAKEUP;input keyevent KEYCODE_MOVE_HOME;settings put global airplane_mode_on 0;am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false'"


0

这是对我有效的方法:

启用飞行模式的方法:

adb shell settings put global airplane_mode_on 0
adb shell am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false

禁用飞行模式:
adb shell settings put global airplane_mode_on 1
adb shell am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true

0
我在我的移动自动化框架中使用的一种有效方法:

已经适用于 OS 5.x、6.x、7.x 和 8.x,需要对其进行 9.x 的测试

/**
 * Method to set Android device Airplane mode.
 * 
 * @param status
 * 
 *               true - turn on airplane mode false - turn off airplane mode
 */
public static void setAndroidDeviceAirplaneMode(boolean status) {
    try {

        String airplaneModeStatus = "";
        if (status) {
            airplaneModeStatus = "0";
        } else {
            airplaneModeStatus = "0";
        }
        String sdkPath = System.getenv("ANDROID_HOME") + "/platform-tools/";
        Runtime.getRuntime().exec(sdkPath + "adb shell settings put global airplane_mode_on " + airplaneModeStatus);
        Thread.sleep(1000);
        Process process = Runtime.getRuntime()
                .exec(sdkPath + "adb shell am broadcast -a android.intent.action.AIRPLANE_MODE");
        process.waitFor();
        Thread.sleep(4000);
        if (status) {
            logger.info("Android device Airplane mode status is set to ON");
        } else {
            logger.info("Android device Airplane mode status is set to OFF");
        }
    } catch (Exception e) {
        System.out.println(e.getMessage());
        logger.error("Unable to set android device Airplane mode.");
    }
}

0

如果您拥有root访问权限,并且David Ferenczy Rogožan答案方法导致了安全异常:

Permission Denial: not allowed to send broadcast android.intent.action.AIRPLANE_MODE

您可以尝试以超级用户身份运行以下命令。

启用飞行模式

adb shell "su -c 'settings put global airplane_mode_on 1'"
adb shell "su -c 'am broadcast -a android.intent.action.AIRPLANE_MODE'"

关闭飞行模式

adb shell "su -c 'settings put global airplane_mode_on 0'"
adb shell "su -c 'am broadcast -a android.intent.action.AIRPLANE_MODE'"

在我使用 Android 9 的经验中,只有在广播命令时才需要显式调用 su,而对于前者,我可以保持不变:
adb shell settings put global airplane_mode_on [0|1]

感谢Arya在上述答案的评论区留下了这个技巧。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接