4

Android設定で自動輝度が有効になっている場合、Androidによって画面の輝度が変更される速さを変更したいと思います。

問題は、光センサーがユーザーの手で誤って覆われると、画面の明るさが急速に変化すると非常に煩わしいことです。

自動輝度を無効にするオプションではありません。

私はこれを見つけました:Androidで周囲の光に応じて明るさを変更します しかし、手動でハックしたくない...

より良いオプションはありますか?

4

2 に答える 2

3

これらの定数を確認することをお勧めします

 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. 

hereで説明されているように、rateのパラメーターを確認することもできますpublic boolean registerListener (SensorListener listener, int sensors, int rate)

 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.
于 2013-08-15T13:29:40.933 に答える
1

DisplayManager で自動輝度変更遅延を変更することも、曲線を変更することもできません。明るさを制御し、それがどのように行われるかをより詳細に制御できる市場アプリケーションの1つをインストールできます. ここをチェック: 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;
于 2013-08-11T08:38:37.293 に答える