我已经四处寻找,但没有找到确切的答案。我希望能找到一种不需要GUI界面的通过ADB切换飞行模式的方法。我已经找到了一种调用菜单然后使用键盘事件开启飞行模式的方法,但由于需要考虑可能会发生的UI布局变化,这种方法只是一个临时解决方案。
我开始觉得没有办法通过意图(intent)来简单地切换飞行模式的开关,但如果你有任何信息,我将非常感激。
我已经四处寻找,但没有找到确切的答案。我希望能找到一种不需要GUI界面的通过ADB切换飞行模式的方法。我已经找到了一种调用菜单然后使用键盘事件开启飞行模式的方法,但由于需要考虑可能会发生的UI布局变化,这种方法只是一个临时解决方案。
我开始觉得没有办法通过意图(intent)来简单地切换飞行模式的开关,但如果你有任何信息,我将非常感激。
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上可以正常运行。
威廉的答案是对我最有用的 -> 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";
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
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
以下是我的实践经验:
adb shell settings put global airplane_mode_on 1
adb shell su -c am broadcast -a android.intent.action.AIRPLANE_MODE
为关闭功能,只需在第一条命令中传递0即可。
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'"
这是对我有效的方法:
启用飞行模式的方法:
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
已经适用于 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.");
}
}
如果您拥有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'"
adb shell settings put global airplane_mode_on [0|1]
感谢Arya在上述答案的评论区留下了这个技巧。
adb shell cmd connectivity airplane-mode enable
命令。 - nealmcb