使用ADB检查飞行模式是否已打开?

6

我知道我们可以做以下事情:

adb shell am start -a android.settings.AIRPLANE_MODE_SETTINGS
adb shell input keyevent 19 ; adb shell input keyevent 23

如何在安卓设备上开启/关闭飞行模式。

然而,有没有通过ADB检查设备是否已开启飞行模式的方法呢?

我之所以问这个问题,是因为上面的两行代码将在不知道是开启还是关闭的情况下切换飞行模式。但我需要一种通过ADB确保飞行模式确实已开启/关闭的方法。

请帮帮我!

提前感谢!


对于特定设备,通过在两种条件下运行adb shell getprop的输出进行差异比较,似乎可以发现有用的更改 - 例如网络运营商名称 - 但是编写跨所有设备/版本的通用规则可能很困难。但既然你在谈论ADB,也许你正在谈论有限设备集上的自动化测试运行,对于这些设备,你可以确定一组可行的实用检查。如果飞行模式未激活但设备由于某种原因暂时无法找到服务,则还可能出现虚假报告。 - Chris Stratton
我认为应该接受Anand的答案,因为Alex的答案中的命令只是更改了飞行模式设置值(按钮状态),但没有任何实际效果(网络仍然启用)。您必须在更改设置后广播意图,才能产生与手动点击设备上的飞行模式按钮相同的效果。 - David Ferenczy Rogožan
2个回答

17
你可以在执行adb shell后使用以下命令。 打开:
adb shell settings put global airplane_mode_on 1
adb shell am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true
关闭:
adb shell settings put global airplane_mode_on 0
adb shell am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false 这将打开或关闭飞行模式。

看起来您可以省略 --ez 参数,这样广播命令就可以同时用于启用和禁用:adb shell am broadcast -a android.intent.action.AIRPLANE_MODE。您能否解释一下它的工作原理?我的意思是为什么两个命令都需要?第一个只是改变飞行模式设置,但对网络没有真正的影响,第二个则完成了其余的工作。 - David Ferenczy Rogožan
1
这仅适用于Android 6及以下版本。从Nougat(Android 7)开始,它会引发“权限拒绝:不允许发送广播android.intent.action.AIRPLANE_MODE”错误。 - Thach Lockevn

15

adb shell settings get global airplane_mode_on 返回 0 表示飞行模式关闭,返回 1 表示飞行模式开启。


非常感谢!我有一个快速问题,你知道在哪里可以找到更多关于adb shell设置的信息吗?我的意思是,我可以查询一些其他的东西吗?我能否像“adb shell settings get global wifi_on”这样做来检查wifi是否已打开?网络上是否有任何相关文档?如果这个问题的答案很明显而我没有看到,那么请原谅。 - JJackJi
2
"settings get" 命令只是一个简单的 Java 封装器,用于 "settings" 内容提供程序查询。就像通常在 Android 中一样 - 最好的文档在源代码中 https://android.googlesource.com/platform/frameworks/base/+/master/cmds/settings/src/com/android/commands/settings/SettingsCmd.java - Alex P.

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