我已经四处寻找,但没有找到确切的答案。我希望能找到一种不需要GUI界面的通过ADB切换飞行模式的方法。我已经找到了一种调用菜单然后使用键盘事件开启飞行模式的方法,但由于需要考虑可能会发生的UI布局变化,这种方法只是一个临时解决方案。
我开始觉得没有办法通过意图(intent)来简单地切换飞行模式的开关,但如果你有任何信息,我将非常感激。
我已经四处寻找,但没有找到确切的答案。我希望能找到一种不需要GUI界面的通过ADB切换飞行模式的方法。我已经找到了一种调用菜单然后使用键盘事件开启飞行模式的方法,但由于需要考虑可能会发生的UI布局变化,这种方法只是一个临时解决方案。
我开始觉得没有办法通过意图(intent)来简单地切换飞行模式的开关,但如果你有任何信息,我将非常感激。
首先,我永远不会依赖那些像大多数答案建议的那样盲目地通过 UI 导航的解决方案。下面有更多说明。
我喜欢 G murali 的第一个答案,它建议执行以下操作以启用飞行模式:
adb shell settings put global airplane_mode_on 1
不幸的是,它不起作用。它只是改变了飞行模式图标的状态,但所有无线电设备仍然处于活动状态。
它缺少一个非常重要的部分,即在设置更改后立即广播意图,以通知应用程序飞行模式状态已更改。
要启用飞行模式,请使用以下命令:
adb shell settings put global airplane_mode_on 1
adb shell am broadcast -a android.intent.action.AIRPLANE_MODE
要关闭飞行模式,您需要将设置更改为0并重新广播意图:
adb shell settings put global airplane_mode_on 0
adb shell am broadcast -a android.intent.action.AIRPLANE_MODE
这个代码已经在Android 6上测试并且可以工作。
很多答案建议使用一个活动来打开飞行模式设置,然后模拟一些按键操作来浏览UI界面。 我不建议这样做。设备可能会有短暂的延迟,而在打开设置对话框之前就进行了按键操作,或者例如在此期间会出现一些意外的对话框。 在这两种情况下,按键操作将导致某些意外的行为,可能会有害。
并且UI界面可能因品牌、型号、Android版本等而异。 我在三星Galaxy S4(Android 6.0.1)上进行了测试,但没有起作用。这可能是三星与默认UI之间的差异。
设置操作方法应该是完全安全的。
---2022年10月更新
如果您遇到有关安全设置的错误,请使用以下最佳解决方案:
移动数据:adb shell svc data disable
wifi:adb shell svc wifi disable
java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.AIRPLANE_MODE from pid=13094, uid=2000
。 - undefinedadb shell cmd connectivity airplane-mode
disabled
adb shell cmd connectivity airplane-mode enable
adb shell cmd connectivity airplane-mode disable
svc data enable|disable
)仅仅是打开或关闭数据,而不改变移动电台的功率,但这个命令实际上会断开无线电连接。 - baum无外壳命令实现。
- undefined以下是我如何在模拟器(API 25)上启用飞行模式并解决权限问题的方法。
adb -s emulator-5554 shell settings put global airplane_mode_on 1
adb -s emulator-5554 shell 'su 0 am broadcast -a android.intent.action.AIRPLANE_MODE'
svc data disable
if [[ "$(adb shell dumpsys wifi | grep mAirplaneModeOn)" == "mAirplaneModeOn true" ]]; then
adb shell am start -a android.settings.AIRPLANE_MODE_SETTINGS
&& input keyevent 19
&& input keyevent 23
&& input keyevent 4
fi
if [[ "$(adb shell dumpsys wifi | grep mAirplaneModeOn)" == "mAirplaneModeOn false" ]]; then
adb shell am start -a android.settings.AIRPLANE_MODE_SETTINGS
&& input keyevent 19
&& input keyevent 23
&& input keyevent 4
fi
KEYCODE_ENTER
比数字值更好。 - undefinedadb shell am start -a android.settings.AIRPLANE_MODE_SETTINGS
adb shell input keyevent 19 & adb shell input keyevent 23
KEYCODE_ENTER
比数字值更好。 - undefined只针对已root的设备有效。
打开飞行模式:
adb shell -c settings put global airplane_mode_on 1
adb shell -c am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true
adb shell -c settings put global airplane_mode_on 0
adb shell -c am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false
在我的 .zshrc 文件中,我添加了以下内容来模拟飞行模式。
alias android:online="androidOfflineOnline enable"
alias android:offline="androidOfflineOnline disable"
function androidOfflineOnline {
adb shell svc data $1
adb shell svc wifi $1
}
adb shell settings put global airplane_mode_on 1
adb shell settings put global airplane_mode_on 0
已在Android-L上验证过
adb shell am start -a android.settings.AIRPLANE_MODE_SETTINGS & adb shell input keyevent KEYCODE_ENTER & adb shell input keyevent 4
这段命令可以切换飞行模式,但是否有办法明确地选中或取消选择框呢?问题是我找不到在切换之前检查状态的方法。对于我来说,adb shell settings get global airplane_mode_on
命令无法使用,因为无法找到设置。
adb shell cmd connectivity airplane-mode enable
命令。 - nealmcb