gpt4 book ai didi

android - 在 Android 中获取首选屏幕亮度

转载 作者:IT老高 更新时间:2023-10-28 23:19:11 26 4
gpt4 key购买 nike

如何在 Android 中获得首选的屏幕亮度?

要更改屏幕亮度,我使用 WindowManager.LayoutParams.screenBrightness .根据文档:

This can be used to override the user's preferred brightness of the screen. A value of less than 0, the default, means to use the preferred screen brightness. 0 to 1 adjusts the brightness from dark to full bright.



screenBrightness小于 0 我想从首选的屏幕亮度开始。我怎样才能得到这个值?

最佳答案

我会尝试回答,因为我前段时间已经搜索过了。我的简短回答是:在自动模式 下,我从未找到获得当前亮度级别的方法,经过广泛研究。

我将把它分解成多个答案。我不会跳过前提,以便 googlers 可以发现这很有帮助。跳过你不需要的东西。

1- 获取亮度设置值

When screenBrightness is less than 0 I would like to start with the preferred screen brightness. How can I get this value?



对于一个有这么多声誉的人,我相信你已经知道搜索的技巧。 SO上有很多关于这个的答案。只需检查具有类似问题的右侧面板......也就是说,我不会详细说明。
int oldBrightness = Settings.System.getInt(getContext().getContentResolver(), 
Settings.System.SCREEN_BRIGHTNESS);

这就是Android的 BrightnessPreference.java 在 2.3.5 中执行(参见第 68 行)。它也与 lfor 发布的内容相同(出于实际原因)。

它不是无缘无故地命名为旧的亮度。这是存储在某处的设置,而不是当前值。如果您进入手动亮度模式,您只能确定它与用户的体验相同。否则,你只是不知道。你应该检查:
int mode = Settings.System.getInt(getContext().getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS_MODE);

2-听屏幕亮度变化

我们知道,一般来说,当我们想监听Android中的变化时,我们可以尝试监听 Intent。行动,注册 BroadcastReceiver s 和所有这些。但是, 阿法克 , 没有 ACTION_用于亮度变化,例如 SCREEN_[ON|OFF] , 例如。也许系统中隐藏了一个,但我从未见过它,如果它不是公开可用的,那么您处理它时可能会遇到所有可能的陷阱。

有一条消息,日期为 2010 年 12 月,来自 Dianne Hackborn,她说 "there is no broadcast for screen brightness changes" .

所以,我不相信有办法连接到这样的东西。当然,您可以更改设置本身:
Settings.System.putInt(getContext().getContentResolver(),
SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_AUTOMATIC);

3- 聆听环境光的变化

但是,您可以。检测光量。您需要 implements SensorEventListener和:
// class definition:
private SensorManager sensorManager;

@Override
public void onSensorChanged(SensorEvent event) {
float values = event.values[0]; // Ambient LUX
}
// onCreate:
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT),
SensorManager.SENSOR_DELAY_UI);

4-猜亮度变化

说了这么多,我还必须重复哈克伯恩的问题:“你想要完成什么?” (这是给赏金所有者的)。我很高兴看到 Android 如何将环境照度映射到屏幕亮度。我很确定这不是线性的(映射 Sensor.getMaximumRange() 线性到 0..1 浮点间隔)。我已经看到这通常是映射的对数(对较低的亮度范围提供更精细的调整),但我不知道这些参数。也许每个人都使用建议的默认方式,但我不是专家。

如果您可以通过查看它执行此操作的源中的位置来找到 Android 是如何执行此操作的,那就太好了。但不管怎样,我来这么久也没有给你留下同样的问题。我发现 Sensor.getMaximumRange()与您从 SensorEvent 获得的内容不一致 values[0] .在这里,我有一个 Sharp 传感器 (Nexus S),虽然报告最大值为 3,000,但我看到的值高达 10,240。

因此,获取传感器并不可靠(?)。我猜测,根据我在使用 Android 时看到的行为,它以某种方式将 getMaximumValue() 映射到最大亮度,并且高于它的任何值都没有任何区别。

5- 从这里去哪里

我会更多地研究Android资源。在某个地方,可能在较低级别的硬件管理中,您可以看到它们是如何映射的。不过,我想知道这是否可靠,考虑到 Dianne Hackborn 所说的话(他们似乎不希望你这样做)。我猜他们有理由不暴露这一点。或许需要:为什么app一定要知道系统设置?它要么需要提供自己的应用范围级别,要么在极端情况下为系统范围的替换或管理器提供自己的“自动亮度更改方法”(如上文第 4 点)。也许这就是原始开发人员的想法。

无论如何,如果有人找到其他细节,我会非常高兴知道。

关于android - 在 Android 中获取首选屏幕亮度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4544967/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com