Как прочитать реальное, текущее значение яркости/тусклости экрана для Android?

Весь вопрос в заголовке, поэтому я хотел бы подчеркнуть, насколько это возможно:

  • Меня интересует текущее значение (а не его текущие настройки)

  • Меня интересует реальное значение (поэтому, если яркость экрана сейчас ниже, чем за секунду до этого, значение также должно быть ниже)

К сожалению, несмотря на чтение многочисленных сообщений, я не знаю ответа. Я написал небольшую утилиту, которая каждую секунду показывает время и яркость. И это не работает -- потому что, когда телефон (LG L5 с Android 4.0) автоматически понижает яркость (экран затемняется, и в этом нет никаких сомнений) значения остаются прежними то же самое!

Вот соответствующий фрагмент кода:

try
{
  float sys_brightness = android.provider.Settings.System
                         .getFloat(getContentResolver(),
                                   android.provider.Settings
                                   .System.SCREEN_BRIGHTNESS);

  WindowManager.LayoutParams lp = getWindow().getAttributes();  
  float dim = lp.dimAmount;
  float scr_brightness = lp.screenBrightness;
  boolean dim_changed = (lp.flags & WindowManager.LayoutParams
                                    .DIM_AMOUNT_CHANGED)>0;  

  textView.setText(String.format("%02d:%02d:%02d", hours, minutes, seconds)+" "
                   +String.format("%02f, %02f, %02f", sys_brightness,dim,scr_brightness)
                   +" "+Boolean.toString(dim_changed));
}
catch (SettingNotFoundException ex)
{
  textView.setText("excepton");
}

Для справки, значения -- 92, 1.0, -1.0, ложь. Все время.

ВОПРОС -- как прочитать текущее, реальное значение яркости/затемнения?

Я добавил часы для вывода, чтобы убедиться, что мои показания тикают. И они есть.


person greenoldman    schedule 02.08.2012    source источник
comment
Я думаю, что вы путаете яркость с подсветкой. автоматически снижает яркость -› это управление питанием, настраивающее подсветку для экономии энергии. Это не имеет ничего общего (насколько мне известно) с яркостью.   -  person wojciii    schedule 02.08.2012
comment
@wojci, я думаю, вы путаете технический аспект, как подсвечивается экран телефона (не каждый экран должен подсвечиваться) с тем, как устанавливаются настройки в данном телефоне. Но с другой стороны, если Android так же запутается... Я проверю.   -  person greenoldman    schedule 02.08.2012
comment
У меня та же проблема, я пытаюсь изменить поведение, когда я тусклый или на полной яркости при использовании тусклого экрана блокировки пробуждения, любые идеи были бы большой помощью   -  person draksia    schedule 22.01.2013
comment
Вы когда-нибудь догадывались об этом? Меня интересует чтение яркости экрана   -  person Kmanc    schedule 21.02.2014
comment
@Kmanc, честно говоря, не помню, но сомневаюсь. Программирование системного уровня на Android настолько болезненно, что после двух утилит я сдался, это не стоит моего времени.   -  person greenoldman    schedule 21.02.2014
comment
Ладно, все равно спасибо. Я думаю, что, возможно, понял часть проблемы, хотя этот пост старый, поэтому он может быть вам бесполезен. По сути, если автояркость включена, чтение из android.provider.settings..... всегда будет сообщать о любом значении уровня яркости, установленном вручную, независимо от фактической яркости. Поэтому я установил оператор case, который возвращает автоматическое включение или уровень яркости, если автоматическое отключено.   -  person Kmanc    schedule 21.02.2014


Ответы (2)


Если вы выполните grep -r "SCREEN_BRIGHTNESS" * в android/system/frameworks (исходный код Android), вы найдете: BrightnessController.java, который используется для управления яркостью. Может быть, вы можете использовать этот класс в качестве вдохновения.

person wojciii    schedule 03.08.2012
comment
Спасибо большое. Мне не повезло, я проверил, что есть у IPowerManager, и есть метод setBacklightBrightness, но нет аналога, чтобы прочитать это значение обратно :-(. Сейчас начал просматривать исходники Android, может что-то всплывет. - person greenoldman; 04.08.2012
comment
Это интерфейс AIDL, который можно использовать для RPC. Похоже на вашу проблему: groups.google.com/forum/ ?fromgroups#!topic/android-developers/. - person wojciii; 04.08.2012
comment
Я уже обнаружил, что getBacklightBrightness нигде нет, так что это тупик. Однако есть интересный метод isScreenBright в PowerManagerService, и теперь я изо всех сил пытаюсь получить его экземпляр. - person greenoldman; 04.08.2012

Следующий фрагмент кода выдает число с плавающей запятой от 0 до 1, которое соответствует яркости.

WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
Float darkness = layoutParams.screenBrightness;

Похоже, что планшет Asus показывает тусклый экран, когда яркость установлена ​​на ноль. Kindle Fire довольно темный и скрывается за экраном блокировки.

person user462990    schedule 10.08.2012
comment
Ваш код в точности соответствует тому, что я разместил в вопросе — он не работает должным образом. Он возвращает теоретическое значение, то есть яркость, которая должна быть установлена, а не значение, которое фактически установлено (для физического экрана). - person greenoldman; 10.08.2012