Невозможно программно применить яркость экрана системы в Android - PullRequest
13 голосов
/ 17 февраля 2011

Я использую следующее для установки автоматического режима и уровня яркости системы:

    android.provider.Settings.System.putInt(y.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS_MODE, 0);
    android.provider.Settings.System.putInt(y.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS, y.brightness1);

Я могу включать и выключать автоматическую регулировку яркости и устанавливать различные уровни.Настройки, кажется, применены правильно - я могу зайти в «Настройки» -> «Дисплей» -> «Яркость», и все настройки, которые я установил, отображаются правильно.Однако фактический экран не меняет своей яркости.Если я просто нажму на ползунок в настройках дисплея, то все будет применено.

Я должен упомянуть, что я запускаю приложение с основным действием, и эти настройки применяются в BroadcastReceiver.Я попытался создать фиктивное действие и проверил там материал, но получил те же результаты.

Ответы [ 4 ]

16 голосов
/ 20 февраля 2011

ОК, нашел ответ здесь: Обновление дисплея из виджета?

По сути, нужно сделать прозрачное действие, которое обрабатывает изменение яркости.Что не упоминается в посте, так это то, что вы должны сделать:

Settings.System.putInt(y.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS_MODE, 0);
Settings.System.putInt(y.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS, brightnessLevel); 

, затем сделать

WindowManager.LayoutParams lp = getWindow().getAttributes();
    lp.screenBrightness = brightness; 
    getWindow().setAttributes(lp);

И если вы вызываете finish () сразу после применения изменений, яркость никогда не будетизменить, потому что макет должен быть создан до применения настроек яркости.Итак, я закончил тем, что создал поток с задержкой 300 мс, а затем вызвал finish ().

2 голосов
/ 17 февраля 2011

Я делаю нечто подобное с яркостью экрана в одном из моих приложений, и я делаю это через WindowManager, и это работает Я использую следующий код, чтобы получить текущую яркость экрана (и сохранить ее на потом) и установить ее на полную:

    WindowManager.LayoutParams lp = getWindow().getAttributes();
    previousScreenBrightness = lp.screenBrightness;
    float brightness = 1;
    lp.screenBrightness = brightness; 
    getWindow().setAttributes(lp); 
1 голос
/ 21 июня 2013

Используйте ответ, заданный " user496854 " выше
Если вы берете max screenBrightness = 255, то при выполнении

WindowManager.LayoutParams lp = getWindow().getAttributes(); 
lp.screenBrightness = brightness; getWindow().setAttributes(lp);

делите screenBrightness на 255 как

WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = brightness/(float)255;   
getWindow().setAttributes(lp);
1 голос
/ 15 октября 2011

Я создал статический метод в своем классе Application, который я вызываю из всех моих методов Activity.onResume ().

MyApplication extends Application {
    ...
    public static void setBrightness(final Activity context) {
        // get the content resolver
        final ContentResolver cResolver = context.getContentResolver();
        // get the current window
        final Window window = context.getWindow();

        try {
            // get the current system brightness
            int brightnessLevel = System.getInt(cResolver,System.SCREEN_BRIGHTNESS);
            // get the current window attributes
            LayoutParams layoutpars = window.getAttributes();
            // set the brightness of this window
            layoutpars.screenBrightness = brightnessLevel / (float) 255;
            // apply attribute changes to this window
            window.setAttributes(layoutpars);
        } catch (SettingNotFoundException e) {
            // throw an error cuz System.SCREEN_BRIGHTNESS couldn't be retrieved
            Log.e("Error", "Cannot access system brightness");
            e.printStackTrace();
        }
    }
}

MyActivity extends Activity {
    ...
    public void onResume() {
        super.onResume();
        Log.d(TAG, "onResume()");
        MyApplication.setBrightness(this);
    }
}
...