如何在android中操作屏幕颜色温度,如f.lux

时间:2016-07-14 11:29:41

标签: java android screen

我正在尝试开发一款应用,让用户可以在每个应用的基础上控制屏幕的温度。此功能以阅读模式的名称出现在miui中。

我想要实现的行为在此处表示:http://en.miui.com/thread-170033-1-1.html

我不知道在Android中使用什么来实现同样的目标。 Android中是否有可以帮助我的API或类?

1 个答案:

答案 0 :(得分:4)

您需要与SurfaceFlinger通信并向其发送颜色转换矩阵(事务1015,令牌" android.ui.ISurfaceComposer",数据由32位整数后跟16个浮点数组成)。查看SurfaceFlinger.cpp的Android源代码以及system accessibility settings中的颜色反转代码。这允许您设置您喜欢的任何颜色转换矩阵。至少我是如何在ColorChanger app中完成的。

然后,您可以使用自定义颜色转换矩阵重新映射色温。

除非你的应用程序有系统签名,否则你需要使用root,然后与SurfaceFlinger本地通信或启动一些使用大量反射的java代码。

此外,这仅适用于Android 5.0或更高版本。我的ColorChanger有一种非常强硬的方式让它在4.4上工作,但相信我,你不想去那里(我做了,因为我写的时候只有4.4设备)。

或者,您可以执行一些更低级别的操作,例如CF.lumen。我认为Chainfire会重写部分显示驱动程序。如果您没有/ system的写入权限,我不确定这是否有效。