我有一部Android手机,我想在上面通过编程切换飞行模式。
我无法启动这个设备,这使得我正在运行的任何应用程序都没有权限编辑这些设置,所以我使用adb打开设置菜单并在那里切换开关。
在某些情况下,执行以下adb shell命令将有效:
//Get airplane mode settings menu
adb -s ${device} shell am start -a android.settings.AIRPLANE_MODE_SETTINGS
//Hit enter (as many times as required)
adb -s ${device} shell input keyevent KEYCODE_ENTER
//Check the state of airplane mode to determine when successful
adb -s ${device} shell settings get global airplane_mode_on
但是,仅当包含飞行模式开关的菜单是设置页面上列出的第一个菜单选项时,这才有效,因为“android.settings.AIRPLANE_MODE_SETTINGS”将仅导航到找到设置的菜单。它不会对设置本身执行任何聚焦,因此以下命令按回车键将按错误的设置。
如果使用这种方法,是否有办法仅识别/聚焦飞机切换开关,或者检查哪个菜单项处于聚焦状态,以便迭代这些项,直到找到正确的菜单项?
此外,如果有一种方法可以执行这些adb命令而无需将手机插入PC,那就太好了 - 即adb客户端是否可以在手机本身上运行(然后欺骗自己认为它是连接的设备)。
最后——这里的最终目标只是按需以编程方式切换飞行模式(最终请求将由termux应用程序中运行的node.js进程触发)。如果有更好的方法来实现这一点,而不使用不需要root权限的adb,这也是可行的。
创建bat文件:
adb-s 3e31d8d97d95 shell am start-a android.settings。Planet_ MODE_;而[0-le5];do输入键事件23;睡眠0.1;输入键事件23;睡眠13;回声“完成”;完成;
运行脚本。
我怀疑这是一个令人难以置信的利基要求,但如果有人对如何使用adb命令在非根android手机上切换飞机模式感兴趣,其中UI飞机模式切换按钮不是设置活动中的第一项…请阅读下面!
如前所述,加载包含飞行模式按钮的屏幕:
adb shell am start -a android.settings.AIRPLANE_MODE_SETTINGS
现在检查 UI 的当前状态:
adb shell uiautomator dump
adb pull /sdcard/window_dump.xml
可以检查上面第一个命令的STDOUT,以确定默认情况下uiautomator转储的确切发送位置。
要导航设置菜单,请使用DPAD向上/向下键事件:
adb shell input keyevent KEYCODE_DPAD_DOWN
adb shell input keyevent KEYCODE_DPAD_UP
根据设备的不同,我发现使用上述选项会导致节点被选中或被聚焦。可以解析UI转储的输出,并在DOM中搜索“node[selected=true]”或“node[focused=true]”,这取决于设备使用的是哪个。我最终会查看< code > node . attr(' text '). toupper case . contains(' PLANE MODE ')何时达到飞行模式设置,然后最终执行:
adb shell input keyevent KEYCODE_ENTER
启动开关。
目前,这涵盖了我尝试过的设备,但如果菜单中有大量滚动要做,性能就不太好了。我很想知道是否有一种方法可以将uiautoator转储输出保存在设备的内存中,并在那里解析XML以避免不必要的I/O输出到文件、拉到本地驱动器并将其读回内存中。
以下是用于打开和打开飞行模式的ADB命令:
开:
adb shell settings put global airplane_mode_on 1
adb shell am broadcast -a android.intent.action.AIRPLANE_MODE
关闭:
adb shell settings put global airplane_mode_on 0
adb shell am broadcast -a android.intent.action.AIRPLANE_MODE
我知道我们可以做到以下几点: 以打开/关闭Android设备上的飞行模式。 但是,是否有任何东西可以检查当前设备是否通过ADB打开了飞行模式? 我这样问是因为上面的两行代码将切换飞行模式,而不知道它是打开还是关闭。但我需要一种方法来确保飞行模式确实是通过ADB打开/关闭的。 请帮帮我! 提前致谢
如何在Android手机上启用MTP模式,仅在命令行上使用ADB?屏幕无法使用,我需要访问文件。不过,我启用了USB调试。 奇怪的是,这不管用。
我找遍了,也没找到这个问题的具体答案。我希望能找到一种不涉及GUI的方式从ADB切换飞行模式。我发现并使用了调用菜单然后使用keyevents打开飞行模式的方法,但是由于需要考虑UI布局中可能的变化,这种方法只是一种临时的解决方案。 我开始认为没有办法通过意图打开或关闭飞行模式,但如果您有任何信息,我将不胜感激。
我目前正在尝试使用Android版本6.0以编程方式切换飞行模式。 我做了相当多的研究,有些人说从4.2版本开始就不可能了,而其他人说仍然有一些变通办法,我已经试过了,但对我不起作用。 我最后尝试的是以下内容: 但是在这里我得到错误 我知道我可以在模拟器上更改这些设置,但是否可以在我的外部设备上更改这些设置?在另一个线程中,有些人说对于某些设备是可能的,但我无法弄清楚有关我的设备(HUAWEI P
问题内容: 我需要制作一个脚本来在Android设备上执行很多事情,我的设备已经扎根,当我进入外壳时,我可以给命令su,它可以工作,但是我需要传递以下命令: 当我在su起作用之前放置一些命令时,根据我的了解,su创建了一个立即返回的新shell,但是我需要在su shell上给出命令,我该怎么做? 问题答案: 好吧,如果您的手机已扎根,则可以使用“ su -c”命令运行命令。 这是build.pr
我发现了这个问题,我尝试了如下: 它在Android 4.4.1上运行得非常好 但在 4.0.1 中不起作用。(设置:未找到/支持4.2或更高版本。 所以,我又试了一次如下: 另外,这项工作很奇怪 “AIRPLANE_MODE_SETTINGS”窗口弹出窗口 - 而且它被关闭了屏幕,不起作用 所以我认为这种方式不好。 Q : 如何在4.1或更早版本中像“设置全局airplane_mode_on 1