首页 > 解决方案 > 在模拟器设置 GUI 或通过 telnet 设置电池电量/状态与 adb dumpsys 电池组有何不同?

问题描述

我正在尝试创建一个监控电池电量的应用程序,但由于实时测试会非常麻烦,我想通过模拟器模拟不同的值和充电状态。

当我通过单击工具栏上的“...”进入模拟器设置 GUI,然后转到“电池”并更改值时,它在模拟器中不起作用。操作系统的电池指示灯始终显示电池电量为 100% 等。

在研究时,我发现了另外两种更改电池状态的方法:

通过 telnet 和 adb。Telnet 匹配在模拟器设置 GUI 中设置的值,反之亦然,但不会更改系统中的实际值。电池状态指示器和使用batteryStatus.getIntExtraetc 获取值均不受影响。只有使用adb shell dumpsys battery set level 20才能达到预期的效果。

为什么?telnet 和设置中的控件实际上会发生什么变化?有什么方法可以使设置真正起作用,以便我可以通过模拟器设置 GUI 更改电池电量和状态?

我在 Windows 10 上使用 Android Studio 3.5.3 及其附带的模拟器,版本为 29.3.4-6110076,API 29。

标签: androidandroid-studioandroid-emulatorbattery

解决方案


在 Android Pie 下,telnet 路由有效(至少,它适用于我们用来测试的相对较旧的 AVD)——它与构成 Android 模拟器基础的 qemu 系统联系,您可以将电源容量设置为 20 或其他。似乎 GUI 使用了这条路线。这些参数由dumpsys battery逻辑反映......直到您开始设置它们dumpsys battery set,此时dumpsys开始忽略qemu值。

在 Android 10 下,似乎只有 adb 命令生效,因此它们对 qemu 参数的跟踪已被破坏 - 我没有看到任何关于它的公告,所以我认为这是偶然的。

如果它不再在 GUI 中工作,那么 Emulator 团队中可能没有人告诉 GUI 团队他们计划打破 qemu 路线。

我注意到 Android 10 的模拟速度明显比 Pie 慢,尽管在 CPU 级别的上下文切换更少,所以可能更深层次的东西发生了变化,qemu 链接是一个牺牲品。


推荐阅读