Intereting Posts
Android: быстрое размытие растрового изображения? Установка системных изображений Intel x86 Atom в автономном режиме (вручную) для Android Равномерная ширина столбцов Android GridLayout Android NDK mmap вызывается на 32-битных устройствах после обновления до Lollipop Программирование различных макетов для разных версий в Android Фрагмент фонового изображения Android Где найти информацию о команде оболочки «service call» для Android? Сравнить два изображения в android Что такое использование BaseColumns в Android? Что происходит с Activity.finish (), когда AsyncTask все еще работает в фоновом режиме? Как определить, имеет ли устройство Android сенсорный экран? Как отправить Android-библиотеку (aar) с помощью удаленных зависимостей (gradle)? Ошибка при запуске проекта календаря Наложение панели инструментов поверх содержимого активности Заполнение не работает с определенным фоновым ресурсом

Получите предпочтение яркости экрана в Android

Как вы получаете предпочтительную яркость экрана в Android?

Чтобы изменить яркость экрана, я использую WindowManager.LayoutParams.screenBrightness . Согласно документации:

Это можно использовать для переопределения предпочтительной яркости экрана на экране. Значение менее 0 по умолчанию означает использование предпочтительной яркости экрана. От 0 до 1 регулирует яркость от темноты до полной яркости.

Когда значение screenBrightness меньше 0, я хотел бы начать с предпочтительной яркости экрана. Как я могу получить это значение?

Solutions Collecting From Web of "Получите предпочтение яркости экрана в Android"

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

Я разбиваю это на несколько ответов. Я не буду пропускать помещение, так как поисковики могут найти это полезным. Пропустите то, что вам не нужно.

1- Получить значение настройки яркости

Когда значение screenBrightness меньше 0, я хотел бы начать с предпочтительной яркости экрана. Как я могу получить это значение?

Для человека, у которого есть такая репутация, я уверен, что вы уже знаете упражнение о поиске. Тут есть тонны ответов об этом здесь. Просто проверьте правильную панель с похожими вопросами … что я не буду подробно описывать.

 int oldBrightness = Settings.System.getInt(getContext().getContentResolver(), Settings.System.SCREEN_BRIGHTNESS); 

Вот как работает BrightnessPreference.java Android в 2.3.5 (см. Строку 68). Это также одно и то же (по практическим соображениям) то, что было опубликовано.

Он не назван старой яркостью ни за что. Это параметр, который хранится где-то, а не текущее значение. Вы можете быть уверены, что это то же самое, что и пользователь, если вы находитесь в режиме ручной яркости. В противном случае вы просто не знаете. Вы должны проверить:

 int mode = Settings.System.getInt(getContext().getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE); 

2. Прослушивание изменений яркости экрана

Как мы знаем, как правило, когда мы хотим слушать изменения в Android, мы можем попробовать прослушивать действия Intent , регистрировать BroadcastReceiver и все такое. Тем не менее, AFAIK , нет ACTION_ для изменения яркости, например SCREEN_[ON|OFF] . Может быть, в системе есть одна скрытая система, но я ее никогда не видел, и если она не является общедоступной, у вас есть все возможные проблемы с этим.

Сообщение от Decian от декабря 2010 года от Dianne Hackborn, где она говорит, что «нет трансляции изменений яркости экрана» .

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

 Settings.System.putInt(getContext().getContentResolver(), SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_AUTOMATIC); 

3. Прослушивание изменений внешнего освещения

Вы можете, однако, приблизиться. Определить количество света. Вам необходимо implements SensorEventListener и:

 // class definition: private SensorManager sensorManager; @Override public void onSensorChanged(SensorEvent event) { float values = event.values[0]; // Ambient LUX } // onCreate: sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT), SensorManager.SENSOR_DELAY_UI); 

4- Угадайте изменение яркости

После всего этого я также должен повторить вопрос Хакборна: «Чего вы пытаетесь достичь?» (Это для владельца щедрости). Я был бы рад увидеть, как Android отображает окружающий люкс для яркости экрана. Я совершенно уверен, что это не линейная вещь (карта Sensor.getMaximumRange() линейно до 0,1 поплавкового интервала). Я видел, что, как правило, это отображается логарифмически (обеспечивает более тонкие настройки в нижний диапазон яркости), но я понятия не имею о параметрах. Возможно, есть предложенный по умолчанию способ, которым все пользуются, но я не эксперт.

Если бы вы могли найти, как Android делает это, глядя на место в источниках, где он это делает, это было бы здорово. Но в любом случае, я не пришла так долго, чтобы оставить вас с тем же вопросом. Я обнаружил, что Sensor.getMaximumRange() не согласуется с тем, что вы получаете от values[0] SensorEvent values[0] . Здесь у меня есть датчик Sharp (Nexus S), и хотя отчет max 3000, я видел значения до 10 240.

Таким образом, получение датчика не является надежным (?). Я предполагаю, что поведением, которое я видел с помощью Android, так или иначе он сопоставляет getMaximumValue () с максимальной яркостью, и любое значение выше его просто не имеет значения.

5- Куда пойти отсюда

Я бы больше посмотрел на Android-источники. Где-то, возможно, на более низком уровне, аппаратное управление, вы могли видеть, как они отображаются. Тем не менее, я задаюсь вопросом, является ли это надежным, учитывая то, что сказала Диана Хакборн (они, похоже, не хотят, чтобы вы это делали). Я бы предположил, что у них была причина не раскрывать это. Возможно, нужно: почему приложение должно знать настройки системы? Он должен либо предоставить свой собственный уровень на уровне приложения, либо, в крайнем случае, предоставить свой собственный «метод изменения яркости» (как в пункте 4 выше) для общесистемной замены или менеджера. Возможно, это то, о чем подумали оригинальные разработчики.

В любом случае, если кто-нибудь найдет другие подробности, я был бы очень рад узнать.

Ну, чтобы ответить на заданный вопрос, вы можете получить предпочтительную яркость от Settings.system.SCREEN_BRIGHTNESS . Диапазон выглядит 0-255.

 int UserBrightness = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS,-1); 

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