hpi*_*que 17 android preferences brightness
如何在Android中获得首选屏幕亮度?
要更改屏幕亮度,请使用WindowManager.LayoutParams.screenBrightness.根据文件:
这可以用于覆盖用户首选的屏幕亮度.默认值小于0表示使用首选屏幕亮度.0到1可将亮度从暗调整为全亮.
当screenBrightness小于0时,我想从首选的屏幕亮度开始.我怎样才能获得这个价值?
dav*_*ino 40
我会尝试回答,因为我前段时间已经搜索过了.我的简短回答是:经过广泛的研究,我从未找到过在自动模式下获得当前亮度级别的方法.
我会把它分成多个答案.我不会跳过场所,因此谷歌可以发现这有用.跳过你不需要的东西.
1-获取亮度设定值
当
screenBrightness小于0时,我想从首选的屏幕亮度开始.我怎样才能获得这个价值?
对于拥有这么多声誉的人,我相信你已经知道了关于搜索的练习.SO上有很多关于此的答案.只需检查右侧面板中的类似问题...说,我不会详细说明.
int oldBrightness = Settings.System.getInt(getContext().getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS);
Run Code Online (Sandbox Code Playgroud)
这就是Android BrightnessPreference.java在2.3.5中的表现(见第68行).lfor发布的内容也是相同的(出于实际原因).
它没有被命名为旧亮度.这是存储在某处的设置,而不是当前值.只有当您进入手动亮度模式时,才能确定它与用户遇到的情况相同.否则,你只是不知道.你应该检查:
int mode = Settings.System.getInt(getContext().getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS_MODE);
Run Code Online (Sandbox Code Playgroud)
2-收听屏幕亮度变化
我们知道,通常情况下,当我们想要听取Android中的变化时,我们可以尝试听取Intent操作,注册BroadcastReceivers以及所有这些.然而,AFAIK,ACTION_例如SCREEN_[ON|OFF],没有亮度变化.也许系统中隐藏着一个,但我从未见过它,如果它没有公开,那么你就有可能陷入困境.
2010年12月,来自Dianne Hackborn的消息称,"屏幕亮度变化没有广播".
所以,我不相信有一种方法可以连接到这样的东西.当然,您可以更改设置本身:
Settings.System.putInt(getContext().getContentResolver(),
SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
Run Code Online (Sandbox Code Playgroud)
3-听取环境光线的变化
但是,你可以aprox.检测光量.你需要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);
Run Code Online (Sandbox Code Playgroud)
4-猜测亮度变化
毕竟,我还必须重复哈克伯恩的问题:"你想要完成什么?" (这是为赏金所有者).我很高兴看到Android如何将环境lux映射到屏幕亮度.我很确定它不是线性的(Sensor.getMaximumRange()线性映射到0..1浮点间隔).我已经看到,通常这是映射对数(提供更低的亮度范围更精细的调整),但我不知道参数.也许每个人都使用建议的默认方式,但我不是专家.
如果您可以通过查看源代码中的位置来了解 Android的用途,那就太棒了.但无论如何,我没有这么长时间给你留下同样的问题.我发现的是,Sensor.getMaximumRange()这与你从中获得的不一致SensorEvent values[0].在这里,我有一个Sharp传感器(Nexus S),虽然报告最大值为3,000,但我看到的值高达10,240.
因此,获取传感器是不可靠的(?).我猜测,通过我用Android看到的行为,不知何故它将getMaximumValue()映射到最大亮度,而它上面的任何值都没有区别.
5-从这里开始
我会更多地了解Android来源.在某个地方,可能是在较低级别,硬件管理的东西,你可以看到他们如何映射.考虑到Dianne Hackborn说的话,我想知道这是否可靠(他们似乎不希望你这样做).我猜他们有理由不揭露这一点.也许需要:为什么应用程序必须知道系统设置?它要么需要提供他自己的应用范围级别,要么在极端情况下,为系统范围的替换或管理者提供自己的"自动生成改变方法"(如上面第4点所述).也许这就是原始开发者的想法.
无论如何,如果有人发现其他细节,我会非常高兴知道.
Ifo*_*for -1
很好地回答所问的问题,您可以从Settings.system.SCREEN_BRIGHTNESS获取首选亮度。范围看起来是 0-255。
int UserBrightness = Settings.System.getInt(getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS,-1);
Run Code Online (Sandbox Code Playgroud)
当前的亮度实际上是多少,由自动模式设置或应用程序设置其自身的亮度确实是一个不同的问题,我也对答案感兴趣。
| 归档时间: |
|
| 查看次数: |
7644 次 |
| 最近记录: |