Изменение яркости экрана программно программно в Android

StackOverflow https://stackoverflow.com/questions/3737579

  •  03-10-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

Другие советы

Это можно сделать, используя:

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

Смотрите также:http://developer.android.com/reference/android/view/windowmanager.layoutparams.html#screenbrights

Вы должны добавить параметры в 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.

@kamal_tech_view: вы должны преобразовать значение layout.screenbrights = значение; держаться на плаву

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

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

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

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

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();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top