文章目录
- 背景:
- Android 10 的设备上测试正常
- Android 12 中目前出现无法闪烁的问题
- 电量变化广播监听
- 总结
- 参考
背景:
在定制的Android 10系统中,通过修改 Framwork 层的代码后,调用标准的接口后,能实现 LED 灯的闪烁灯效,然而在 Android 12中 移植相同的调用接口后却不能实现闪速灯效。其中点亮灯效、呼吸灯效在Android 10 和 Android 12 中都正常。本文总结了在Android 12中如何实现闪烁灯效,使用场景在用户插入和拔出 USB时需要实现闪烁灯效。
问题排查及解决思路如下:
再排查了标准的 Android 10系统没有问题后,我们结合 BSP 驱动层的硬件同事给出的操作节点,看看是否在硬件层支持闪烁灯效。
Android 10 的设备上测试正常
red green blue中都有delay_off 和 delay_on节点值 闪烁正常。
于时想到了 Android 12 是否硬件支持,先用 ChatGPT来找找答案:
给出的回答中,说是硬件不支持。于时找到硬件的同事求证,最后给出了用操作的节点的方式来测试一下是否支持,测试情况如下图所示:
Android 12 中目前出现无法闪烁的问题
发现这里的LED 灯的 操作节点 之后 消失(delay_off 和delay_on)了。
于是得出结论:硬件层是支持闪烁灯效的,问题回到了我们的 framework层。
尝试了将灯变化直接设置为 100 ,方便排查是否电量有变化时触发了其他灯效导致闪烁失效。
adb shell dumpsys battery set level 100
电量变化广播监听
用这个来监听会8秒一次广播。目前是为了排查电量的变化对灯效的影响,最后排除了这一影响。
由于系统开发层排查了半天都没有接口上的调用问题,于是想到了,闪烁灯效的控制,就直接用最接近硬件的方式去操作。简单点说,说是用命令的方式(需要转换为java代码实现(略))去控制 LED 灯的点亮、闪烁、呼吸灯效,简单直接高效可控,最关键的是能实现需求、解决问题。
附:测试详细命令如下:
测试时发现 这里成功出现闪烁。
目前通过 PowerManagerService.java 中的 参考:
实现了呼吸灯效,闪烁灯效进一步研究。
// Linux 的 led class驱动
echo 255 > /sys/class/leds/green/brightness
cat /sys/class/leds/green/brightness
cat /sys/class/leds/green/max_brightness// 闪烁
echo timer > /sys/class/leds/green/trigger
echo 100 > /sys/class/leds/green/delay_on
echo 200 > /sys/class/leds/green/delay_off// 关闭
echo 0 > /sys/class/leds/green/delay_on
或
echo 0 > /sys/class/leds/green/brightness
总结
本文主要总结了问题的解决思路,如有疑问,欢迎交流。
参考
Android灯光系统(5)-通知灯_江南才尽,年少无知!的博客-CSDN博客
(系统权限对 /sys/class/leds/blue/ 的权限读写)
Android灯光系统(1)——led_class驱动实现
Android led_class driver_Linux学习之路的博客-CSDN博客
记录:闪烁灯的颜色问题
Android系统开发
LightsService (流程图、关键代码说明 详细)