【问题标题】:Use ADB to check if Airplane mode is turned on?使用ADB检查飞行模式是否开启?
【发布时间】:2015-10-16 16:58:26
【问题描述】:

我知道我们可以做到以下几点:

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,也许您正在谈论在有限的设备集合上运行的自动化测试,您可以为此确定一组可行的实用检查。如果飞行模式未激活但设备由于某种原因暂时无法找到服务,您也可能会收到虚假报告。
  • 我会说应该接受 Anand 的回答,因为 Alex 回答中的命令只是更改了飞行模式设置值(按钮状态),但没有任何实际效果(网络仍处于启用状态)。您必须在设置更改后广播意图,才能与手动点击设备上的飞行模式按钮具有相同的效果。

标签: android adb


【解决方案1】:

做完 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。你能解释一下它究竟是如何工作的吗?我的意思是为什么需要这两个命令?第一个只是更改飞行模式设置,但对网络没有实际影响,第二个完成其余工作。
  • 这仅适用于 Android 6(及更低版本)。从 Nougat (Android 7) 开始,它引发了 Permission Denial: not allowed to send broadcast android.intent.action.AIRPLANE_MODE
【解决方案2】:

adb shell settings get global airplane_mode_on 在飞机模式关闭时返回 0,在飞机模式打开时返回 1。

【讨论】:

  • 非常感谢!一个简单的问题,你知道我在哪里可以找到更多关于这个 adb shell 设置的信息吗?我的意思是我可以查询的其他一些事情是什么?我可以执行“adb shell settings get global wifi_on”之类的操作来检查 wifi 是否已打开?网上有这方面的文档吗?抱歉,如果这有一个我没有看到的非常明显的答案。
  • settings get 命令只是用于“设置”内容提供程序查询的简单 java 包装器。和往常一样使用 android - 最好的文档在源代码 android.googlesource.com/platform/frameworks/base/+/master/cmds/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-03
  • 1970-01-01
  • 2020-10-03
相关资源
最近更新 更多