android - 在模拟器设置 GUI 或通过 telnet 设置电池电量/状态与 adb dumpsys 电池组有何不同?
问题描述
我正在尝试创建一个监控电池电量的应用程序,但由于实时测试会非常麻烦,我想通过模拟器模拟不同的值和充电状态。
当我通过单击工具栏上的“...”进入模拟器设置 GUI,然后转到“电池”并更改值时,它在模拟器中不起作用。操作系统的电池指示灯始终显示电池电量为 100% 等。
在研究时,我发现了另外两种更改电池状态的方法:
通过 telnet 和 adb。Telnet 匹配在模拟器设置 GUI 中设置的值,反之亦然,但不会更改系统中的实际值。电池状态指示器和使用batteryStatus.getIntExtra
etc 获取值均不受影响。只有使用adb shell dumpsys battery set level 20
才能达到预期的效果。
为什么?telnet 和设置中的控件实际上会发生什么变化?有什么方法可以使设置真正起作用,以便我可以通过模拟器设置 GUI 更改电池电量和状态?
我在 Windows 10 上使用 Android Studio 3.5.3 及其附带的模拟器,版本为 29.3.4-6110076,API 29。
解决方案
在 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 链接是一个牺牲品。
推荐阅读
- python - 使用带有烧瓶的 kafka-python 发送通知
- typescript - 类型属性上的 Delcare 索引 0
- php - 是否可以通过 [Web] Guard 使用 Laravel 资源?
- r - 修复了spineplot中的条形宽度
- javascript - 无法访问 Sugar 视图控制器中的字段
- javascript - 为什么我会收到 Javascript 请求的“CSRF 令牌丢失或不正确”错误
- git - 使用 aws cloud9 作为 VPS 而不是 IDE
- snakemake - 在暂存空间中运行整个 Snakemake 管道
- ios - 使用 URL Scheme 检测其他应用程序打开的应用程序
- node.js - 查看其他人何时键入