изменение яркости экрана программно в Android - PullRequest
36 голосов
/ 17 сентября 2010

Хочу программно изменить яркость экрана в андроиде.На данный момент я использую этот код:

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

Но этот пример кода работает на кекс, а не на последних версиях.Я использую последнюю версию SDK. Какое решение является предпочтительным для новых версий Android?

Ответы [ 6 ]

80 голосов
/ 05 октября 2010

Это можно сделать с помощью:

WindowManager.LayoutParams layout = getWindow().getAttributes();
layout.screenBrightness = 1F;
getWindow().setAttributes(layout);

Смотрите также: http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#screenBrightness

4 голосов
/ 17 марта 2015

Вы должны добавить параметры к Window до того, как он будет создан, иначе он выдаст java.lang.IllegalArgumentException: Window type can not be changed after the window is added.

См. Пример с android.app.Dialog.Dialog.

final Dialog dialog = new Dialog(this) {
            @Override
            public void onAttachedToWindow() {
                super.onAttachedToWindow();
                WindowManager.LayoutParams layout = getWindow()
                        .getAttributes();
                layout.screenBrightness = 1F;
                getWindow().setAttributes(layout);
            }
        };
        dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        dialog.show();

Обратите внимание, чтозначение яркости составляет от 0,0F до 1,0F.

2 голосов
/ 01 ноября 2013

@ kamal_tech_view: Вы должны преобразовать значение layout.screenBrightness = value; в плавающее

1 голос
/ 25 января 2013

Слишком поздний ответ, но хочу улучшить ..

Я пытался с кодом Тор-Мортена, но это для конкретного экрана, я хотел изменить где угодно, я сделал для этого сервис.

Изменение яркости в зависимости от окружающего света в Android

Надеюсь, будет полезно другим.

1 голос
/ 17 сентября 2010

Как насчет использования интерфейса IHardwareService для этого?Пример можно найти в этом учебнике .

Обновление: ссылка на учебник все еще работает, но фактический код также доступен в следующем ответе.

0 голосов
/ 15 апреля 2016
final Dialog dialog = new Dialog(act);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog
                .setContentView(R.layout.menubase_brightness_control);
        dialog.setCanceledOnTouchOutside(true);

        SeekBar global_brightness_control = (SeekBar) dialog
                .findViewById(R.id.global_brightness_control);
        global_brightness_control.setMax(255);
        global_brightness_control.setProgress(Settings.System.getInt(
                con.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS));

        global_brightness_control
                .setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

                    public void onStopTrackingTouch(SeekBar seekBar) {
                        // TODO Auto-generated method stub

                    }

                    public void onStartTrackingTouch(SeekBar seekBar) {
                        // TODO Auto-generated method stub

                    }

                    public void onProgressChanged(SeekBar seekBar,
                                                  int progress, boolean fromUser) {
                        Settings.System
                                .putInt(con.getContentResolver(),
                                        Settings.System.SCREEN_BRIGHTNESS, progress);
                    }
                });

        dialog.show();
...