【问题标题】:Android: Set automatic brightness adaptation speedAndroid:设置自动亮度适应速度
【发布时间】:2013-08-04 13:15:32
【问题描述】:

如果在 Android 设置中启用了自动亮度,我想修改 Android 更改屏幕亮度的速度。

问题是如果屏幕亮度快速变化会很烦人,因为如果用户的手不小心遮住了光传感器。

这不是禁用自动亮度的选项。

我发现了这个:Change brightness according to surrounding light in android 但我宁愿不要手动破解它......

有更好的选择吗?

【问题讨论】:

    标签: android screen-brightness


    【解决方案1】:

    你可能想看看这些常量

     private static final int BRIGHTNESS_RAMP_RATE_FAST = 200;
     private static final int BRIGHTNESS_RAMP_RATE_SLOW = 40;
    

    以及它们在DisplayPowerController 类中的使用方式

     Controls the power state of the display. Handles the proximity sensor, light sensor,
     and animations between states including the screen off animation. 
    

    您可能还想查看public boolean registerListener (SensorListener listener, int sensors, int rate)rate 参数,如here 所述

     The rate sensor events are delivered at. This is only a hint to the system. 
     Events may be received faster or slower than the specified rate. 
     Usually events are received faster. The value must be one of SENSOR_DELAY_NORMAL,
     SENSOR_DELAY_UI, SENSOR_DELAY_GAME, or SENSOR_DELAY_FASTEST or, the desired delay
     between events in microseconds. 
     Specifying the delay in microseconds only works from
     Android 2.3 (API level 9) onwards. For earlier releases, you must use one of the 
     SENSOR_DELAY_* constants.
    

    【讨论】:

    • 看起来是这样,因为 DisplayPowerController 中的方法还没有向开发人员公开(直到现在)。
    【解决方案2】:

    DisplayManager 中不能改变自动亮度改变延迟,也不能改变曲线。您可以安装控制亮度的市场应用程序之一,并让您更好地控制它的完成方式。在这里查看:https://play.google.com/store/search?q=auto+brightness&c=apps

    从这里:http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.3_r1/com/android/server/PowerManagerService.java#PowerManagerService.getAutoBrightnessValue%28int%2Cint%5B%5D%29

    SensorEventListener mLightListener = new SensorEventListener() {
    2971        public void More ...onSensorChanged(SensorEvent event) {
    2972            synchronized (mLocks) {
    2973                // ignore light sensor while screen is turning off
    2974                if (isScreenTurningOffLocked()) {
    2975                    return;
    2976                }
    2977
    2978                int value = (int)event.values[0];
    2979                long milliseconds = SystemClock.elapsedRealtime();
    2980                if (mDebugLightSensor) {
    2981                    Slog.d(TAG, "onSensorChanged: light value: " + value);
    2982                }
    2983                mHandler.removeCallbacks(mAutoBrightnessTask);
    2984                if (mLightSensorValue != value) {
    2985                    if (mLightSensorValue == -1 ||
    2986                            milliseconds < mLastScreenOnTime + mLightSensorWarmupTime) {
    2987                        // process the value immediately if screen has just turned on
    2988                        lightSensorChangedLocked(value);
    2989                    } else {
    2990                        // delay processing to debounce the sensor
    2991                        mLightSensorPendingValue = value;
    2992                        mHandler.postDelayed(mAutoBrightnessTask, LIGHT_SENSOR_DELAY);
    2993                    }
    2994                } else {
    2995                    mLightSensorPendingValue = -1;
    2996                }
    2997            }
    2998        }
    2999
    3000        public void More ...onAccuracyChanged(Sensor sensor, int accuracy) {
    3001            // ignore
    3002        }
    3003    };
    

    如您所见,LIGHT_SENSOR_DELAY 是一个

    private static final int LIGHT_SENSOR_DELAY = 2000;
    

    【讨论】:

    • 没有选项可以通过 API 实现吗?
    • +random 的解决方案是最新的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    相关资源
    最近更新 更多