1. 什么是AOD?
(要知道更多关于AOD的内容,百度。介绍概念不是这篇的重点。) 它的全称应该是:Always On Display,即我们常说的“熄屏显示”或”灭屏显示“功能,不点亮全屏点亮手机屏幕,只让屏幕局部亮起。
1.1 AOD的作用:
用户不做过多的操作,手机一直局部显示一些重要的内容(时间、重要信息等)。一个小区域能一直看到信息,且功耗小。
1.2 怎么开启AOD?
1)先确定下自己手机屏幕是LCD还是AMOLED,若是LCD,不用找了,没有AOD。 2)不同手机,操作不同。可以参考下面网页对号查看:
https://www.xda-developers.com/how-to-enable-always-on-display-android/#:~:text=To%20enable%20Always%20On%20Display%3A%20Open%20the%20Settings,on%20Home%20screen%2C%20Lock%20screen%20%26%20Always-On%20Display.
1.3 为什么我的手机上不能看到AOD这个功能?
值得注意的是,若是LCD显示屏,AOD功能的意义不是很大。因为LCD屏发光需要整屏的背光,即使是局部亮起,背光还是一直开着的,也就是说,一直是整块屏幕在发光,黑色是因为光没投射出来进入人眼。功耗还是在那里。即使有些APP可以在LCD手机上模拟AOD显示效果,但也不是真正的AOD。如果一直亮着,超级耗电。 若是AMOLED显示屏,就能做到使部分像素点单独显示,不显示的像素不点亮,大大降低了功耗,可以做到一直显示(做到Always on)。 所以知道为什么,即使android设备在软件方面支持AOD,手机厂商也不会开放这个功能,因为没意义。
2 修改Android源码实现AOD
android设备中,在Settings里有一个开关项:设置 - 显示 - 主动显示(Settings - Display - Ambient displays),就可以看到Always On Display。
若没找到,说明Android源码中没实现,这时,就要去改代码实现了。
代码不分析了,也不贴代码在这里了。源码改这2个地方: 1) frameworks/base/core/res/res/values/config.xml里,找到
<bool name="config_dozeAlwaysOnDisplayAvailable">false</bool>
将默认的 false 改为 true :
<bool name="config_dozeAlwaysOnDisplayAvailable">true</bool>
2)同样在 frameworks/base/core/res/res/values/config.xml里,找到
<string name="config_dozeComponent" translatable="false"></string>
将默认的 false 改为 true :
<string name="config_dozeComponent" translatable="true"></string>
编译生成image,更新设备image。再次reboot后,在设备中按照这个路径点击,出现了 Settings - Display - Ambient displays,点击进入,可以看到Always on开关。
如下:
息屏后,显示:
|