- Экран
- Настройки — Экран
- Размеры экрана и его ориентация (Старый и новый способ)
- Плотность экрана, масштабирование шрифта и др.
- Получить текущее значение яркости экрана
- Установить яркость экрана
- Настраиваем яркость экрана в своём приложении
- Определение поддерживаемых экранных размеров в манифесте
- Размеры картинок для фона экрана
- Как включить постоянное отображение данных на экране всех смартфонов Android?
- Что такое «всегда включенный дисплей»?
- В чем разница между новым Ambient режимом и Always-on display?
- Как включить постоянно активный дисплей на Android?
- Как активировать Ambient Display на Android?
- Android-приложение поверх других приложений
- Android: как включить и выключить экран программно?
Экран
Небольшая подборка различных примеров для работы с экраном. На самом деле их не так часто приходится использовать в практике, но иметь общее представление бывает необходимым. Начало было положено в 2012 году, что-то могло устареть.
Настройки — Экран
Чтобы показать окно Экран из системного приложения Настройки:
Размеры экрана и его ориентация (Старый и новый способ)
Чтобы узнать размеры экрана и его ориентацию из запущенного приложения, можно воспользоваться встроенными классами Android.
Данный способ был опубликован в те времена, когда у меня был Android 2.3. Читатели подсказали, что теперь методы считаются устаревшими (API 13 и выше). Пришлось переписывать код. Впрочем, спустя некоторое время и этот код стал считаться устаревшим.
Ориентацию при помощи нового метода не узнаешь. Помните, что это размеры экрана устройства, а не экрана вашего приложения. Кроме того, в документации как-то туманно описывается точность вычислений этих размеров. Никому верить нельзя.
Плотность экрана, масштабирование шрифта и др.
Существует класс DisplayMetrics, также имеющий в своём составе свойства для экрана. Пример также пришлось переписывать после выхода Android 11 (API 30), который теперь тоже устаревший:
Вот ещё несколько способов определения размеров:
Такой же код, но с использованием дополнительной константы SCREENLAYOUT_SIZE_MASK:
На Kotlin в виде отдельной функции.
Заглянув в документацию, обнаружил, что можно обойтись без собственных констант. Они уже есть в Android. Оформил в виде отдельного метода.
Получить текущее значение яркости экрана
В настройках экрана можно установить желаемую яркость экрана при помощи ползунка, но при этом мы не знаем, сколько это в попугаях. Я открою вам секрет при помощи простого кода:
Установить яркость экрана
Если можно получить значение текущей яркости экрана, значит можно и установить яркость. Для начала нужно установить разрешение на изменение настроек в манифесте:
Для настройки яркости нужно использовать параметр System.SCREEN_BRIGHTNESS. Добавим на форму кнопку, метку и ползунок. Код для установки яркости:
Проверил старый пример времён Android 2.2 на эмуляторе с Android 10. Правила ужесточились. Теперь разрешение на изменение системных настроек выдаются только системным программам. Пока ещё есть лазейка, которой и воспользуемся. Новый пример написан на Kotlin. Добавим в манифест немного модифицированное разрешение.
Далее программа должна проверить возможность изменять системные настройки через метод canWrite(). Если такая возможность есть, то запрашиваем разрешение. Появится специальное окно, в котором пользователь должен подтвердить своё решение через переключатель. После этого нужно заново запустить программу, чтобы ползунок стал доступен. Теперь можете менять настройки.
Настраиваем яркость экрана в своём приложении
Существует возможность переопределить яркость экрана в пределах своего приложения. Я не смог придумать, где можно найти практическое применение, но вдруг вам пригодится. Для управления яркостью экрана воспользуемся элементом SeekBar.
За яркость экрана отвечает свойство LayoutParams.screenBrightness:
Интересно, что когда выводил ползунок в значение 0, то эмулятор зависал с экраном блокировки. Вам следует учесть эту ситуацию и добавить условие:
Опять столкнулся с проблемой. Пример работал на старых устройствах, а на некоторых устройства не работает. Но за эти годы мне ни разу не пришлось использовать этот способ, поэтому даже не стал искать причину. И кстати, ошибка со значением 0 уже не возникает (возможно из-за того, что сам пример не работает как раньше).
Определение поддерживаемых экранных размеров в манифесте
Не всегда предоставляется возможным написать приложение для всех возможных типов экранов. Вы можете использовать тег в манифесте, чтобы указать, на устройствах с какими экранами может работать ваша программа.
В данном примере приводится поддержка нормальных и больших экранов. Маленьким экраном можно назвать любой дисплей с разрешением меньше, чем HVGA. Под большим экраном подразумевается такой, который значительно больше, чем у смартфона (например, у планшетов). Экран нормальных размеров имеет большинство смартфонов.
Атрибут anyDensity говорит о том, каким образом ваше приложение будет масштабироваться при отображении на устройствах с разной плотностью пикселов. Если вы учитываете это свойство экрана в своем интерфейсе, установите этому атрибуту значение true. При значении false Android будет использовать режим совместимости, пытаясь корректно масштабировать пользовательский интерфейс приложения. Как правило, это снижает качество изображения и приводит к артефактам при масштабировании. Для приложений, собранных с помощью SDK с API level 4 и выше, этот атрибут по умолчанию имеет значение true.
Размеры картинок для фона экрана
Если вы используете изображение в качестве фона, то нет смысла выводить очень большую картинку на устройстве с маленьким экраном. Можно подготовить разные размеры.
res/drawable-ldpi — 240×320
res/drawable-mdpi — 320×480
res/drawable-hdpi — 480×800
res/drawable-xhdpi — 640×960
res/drawable-xxhdpi — 960×1440
res/drawable-tvdpi — 1.33 * mdpi
Источник
Как включить постоянное отображение данных на экране всех смартфонов Android?
В кастомных версиях Андроид от производителя нет функции Always-on display. Как себя вести, когда нужно сделать экран постоянно активным? Некоторые разработчики смартфонов встраивают эту возможность в прошивку. У большинства же нет необходимых возможностей. Однако, способы есть, достаточно воспользоваться специальными и абсолютно бесплатными приложениями.
Что такое «всегда включенный дисплей»?
Always-on display – это функция, позволяющая смартфону всегда оставаться с активным экраном. Это помогает без касания к устройству узнать время, дату, заряд батареи, погоду или прочитать уведомления. Пропадает необходимость в разблокировке на период активации технологии.
Постоянно активный экран значительно облегчает жизнь людям, которые привыкли постоянно проверять смартфон в ожидании уведомлений. Разблокировка каждую минуту довольно сильно утомляет. Функция позволяет мгновенно узнать необходимую информацию. Благодаря темной теме, минимуму информации и низкой яркости, технология обеспечивает экономное энергопотребление, особенно на устройствах с AMOLED-матрицами.
Не всем подобная функция кажется интересной, но есть немало пользователей, которым она просто необходима. Чтобы помочь им, мастера gamesqa отправились на поиски подходящего приложения, которое работает бесплатно и не требует root-привилегий.
В чем разница между новым Ambient режимом и Always-on display?
Нередко под обеими функциями подразумевается одна и та же возможность. На практике это разные модели работы, поэтому некоторые различия между режимами существуют. Главное отличие заключается в использовании датчика движений при использовании Ambient. Иными словами, экран отображает базовую информацию только в моменты, когда человек касается гаджета.
Это значит, что уведомления, погода и прочая информация будет обновляться во время вытаскивания смартфона с кармана или в момент поднятия со стола. То же справедливо и в обратном порядке, как только телефон будет отложен, экран погаснет. Режим постоянно активного экрана не требует каких-то мер для включения дисплея, он работает постоянно.
Как включить постоянно активный дисплей на Android?
Always On является бесплатным приложением, которое находится в стадии бета-тестирования. Это элементарная в использовании программа, включающая много дополнительных настроек. Для ее работоспособности придется выдать несколько разрешений, после которых сразу открывается доступ к основным возможностям утилиты.
На выбор поставляется несколько «Правил работы». Среди них: включать режим всегда активного дисплея только во время зарядки, после достижения определенного уровня заряда или в указанное время.
Если выбрать пункт «Жесты и ярлыки», становятся видны движения, способные выполнить то или иное действие. Помимо включения режима двойным касанием, можно устанавливать манипуляции на свайпы вверх, вниз и клавишу громкости.
В разделе «Внешний вид» доступны настройки отображения циферблата, яркости, фона и стиля часов. В графе «Поведение» расположены настройки уведомлений, режима энергосбережения и Ambient Display. Последний вариант подразумевает использование датчика приближения, то есть поведение меняется в зависимости от положения смартфона. Это позволяет значительно увеличить время работы батареи.
Как активировать Ambient Display на Android?
Чтобы достичь поставленной цели, потребуется приложение Glance Plus . Оно использует датчик приближения и в моменты активности экрана умеет отображать время, уведомления, прогноз погоды и прочую полезную информацию на заблокированном дисплее. После инсталляции программы пользователь попадет в меню настроек, где можно настроить практически все: от стиля фона до времени календаря и места их расположения. Доступна даже настройка размера и цвета шрифтов.
Внутри приложения есть возможность самостоятельно решать какие уведомления должны отображаться. Можно устанавливать, будут ли показываться оповещения о непрочитанных сообщениях, пропущенных вызовах и событиях в конкретных приложениях. Есть возможность отображения уровня заряда, информации о будильниках и прогнозе погоды. Среди прочих параметров: яркость сообщений, тип фона и время ожидания экрана.
Чтобы узнать любое содержимое с экрана, достаточно провести рукой у датчика приближения.
Важно! При использовании приложения на устройстве с AMOLED-экраном рекомендуется использовать опцию «Случайный выбор». Она расположена в меню настроек. Благодаря рандомному месту отображения информации удастся избежать эффекта пригорания. Он может появляться в случае длительного появления одного и того же цвета на указанном участке. Чтобы еще сократить расход заряда, стоит отказаться от постоянного отображения данных о погоде.
Нужно ли вам технология Always-on display и как она отражается на автономности устройства? Ждем ваших комментариев.
Источник
Android-приложение поверх других приложений
В 2013-году Facebook выпустил функцию Chat Heads для своего мессенджера, который позволяет вести переписку, не открывая сам мессенджер путем нажатия на маленькое круглое окошко, которое всегда висит на дисплее даже поверх других приложений:
Facebook одним из первых продемонстрировал реализацию «Drawing over other apps». Данную возможность разработчики сейчас используют в различных типах приложений — от боковых смарт-меню до записи экрана. В этой статье, хочу продеменстрировать процесс написания приложения-поверх-других-приложений на примере «анти-шпионской» программы Khameleon.
Для начала обозначу цели приложения, который будет реализован как пример приложения-поверх-других-приложений. Допустим нужно, чтобы рядом стоящие люди не могли с легкостью видеть контент моего смарфтона, пока я им пользуюсь. То есть необходима возможность:
- Скрывать часть дисплея, чтобы видеть только необходимую область
- Вместо скрытой области, показывать любой желаемый контент (например заданную веб страницу)
Примерно это может выглядеть так:
С функционалом приложения определились — теперь приступим к самому туториалу. Для написания приложения-поверх-других-приложений есть две самых главных составляющих:
- Service, через который ведется основной контроль и логика приложения
- Layout, который собственно и является GUI
Перед тем как реализовывать эти два компонента, необходимо получить разрешение для приложения-поверх-других-приложений. Для этого в AndroidManifest.xml необходимо добавить:
А для API > 23, т.е. Android M, нужно запросить разрешение в главном Activity:
После того как разрешение получено, укажем Layout, который нужно отобразвить на экране (многие элементы убраны для демонстрации):
В корневой RelativeLayout (по вашему усмотрению) можно поместить любые View’шки как обычно. View с нам нужен для того, чтобы показать как динамично менять размеры Layout. То есть через эту View’шку можно будет расстягивать и сжимать корневой RelativeLayout.
Как только у нас есть минимальный Layout, необходимо реализовать самый обычный Service. Единственная особенность сервиса в добавлении ранее созданного Layout:
На данном этапе наш Layout успешно отображается поверх других приложении. Теперь рассмотрим как можно динамично менять размеры нашего Layout:
Если потянуть за край Layout вверх или вниз, его высота соответственно сжимается и расширяется.
Мы рассмотрели минимальные необходимые шаги для написания приложения-поверх-других-приложений. Полный код для приложенения Khameleon, продемонстрированный выше, можно найти здесь.
Источник
Android: как включить и выключить экран программно?
Прежде чем отмечать этот пост как «дубликат», я пишу этот пост, потому что никакая другая почта не имеет решения проблемы.
Я пытаюсь выключить устройство, а затем через несколько минут или сменить датчик, включите его снова.
Выключить тесты дисплея
Я могу отключить экран, используя:
Мне не удалось отключить экран, используя метод wl.release ().
Включение дисплея
Мое первое предположение, как следует, не работает. Ничего не происходит, экран остается выключенным.
Я также попытался использовать wakelocks, без успеха.
Наконец, я пробовал следующее, без результата.
В общем, я не получаю никаких ошибок в консоли для любого из этих методов. Мой тестовый текст «Экран должен быть включен», находится на экране, когда я включаю устройство с помощью кнопки питания. Это показывает, что код должен работать. Пожалуйста, ответьте только, если вы протестировали код, кажется, что многие из таких функций, как params.screenBrightness = -1 , не работают так, как должны, согласно sdk.
Я собираюсь предположить, что вы хотите, чтобы это действовало, пока ваше приложение находится на переднем плане.
Не выключает экран в традиционном смысле. Это делает экран настолько тусклым, насколько это возможно. В стандартной платформе существует ограничение на то, насколько он может быть тусклым; Если ваше устройство фактически позволяет экрану полностью отключиться, то это определенная особенность реализации этого устройства, а не поведение, которое вы можете рассчитывать на всех устройствах.
Фактически использование этого в сочетании с FLAG_KEEP_SCREEN_ON означает, что вы никогда не позволяете экрану отключиться (и, следовательно, устройство переходит в режим с низким энергопотреблением), даже если конкретное устройство позволяет установить яркость экрана на полную мощность. Имейте это в виду. Вы будете использовать гораздо больше энергии, чем если бы экран был действительно выключен.
Теперь, чтобы вернуть экран к обычной яркости, нужно просто установить значение яркости:
Я не могу объяснить, почему это не заменит ранее установленное значение 0. В качестве теста вы можете попытаться установить принудительную полную яркость, чтобы заставить эту конкретную яркость:
Это определенно работает. Например, приложения Google для книг используют это, чтобы вы могли настроить яркость экрана при использовании книги, а затем при обычной настройке вернуться к обычной яркости.
Чтобы отладить, вы можете использовать «окно dumpsys оболочки adb», чтобы увидеть текущее состояние вашего окна. В данных для вашего окна он скажет вам текущие LayoutParams, которые были установлены для него. Убедитесь, что вы действительно на самом деле стоите.
И снова FLAG_KEEP_SCREEN_ON – отдельная концепция; Он и яркость не оказывают прямого воздействия друг на друга. (И не было бы причин снова устанавливать флаг при отмене яркости, если вы уже установили его при установке яркости на 0. Флаг будет оставаться установленным до тех пор, пока вы его не измените.)
Я написал этот метод, чтобы включить экран после блокировки экрана. Он отлично работает для меня. Попробуй-
И назовите этот метод из onResume() .
Я бы предложил следующее:
Флаг ACQUIRE_CAUSES_WAKEUP объясняется следующим образом:
Обычные блокировки от бодрствования фактически не включают подсветку. Вместо этого они заставляют подсветку оставаться включенными после включения (например, из пользовательской активности). Этот флаг заставит экран и / или клавиатуру сразу включаться, когда приобретается WakeLock. Типичное использование было бы для уведомлений, которые важны для пользователя, чтобы видеть немедленно.
Привет, надеюсь, это поможет:
Вы уверены, что запросили правильное разрешение в вашем файле манифеста?
Вы можете использовать класс AlarmManager 1, чтобы скрыть намерение, которое начинает вашу деятельность, и получает блокировку слежения. Это включит экран и сохранит его. Освобождение wakelock позволит устройству самостоятельно спать.
Вы также можете взглянуть на использование PowerManager, чтобы установить устройство в режим сна: http://developer.android.com/reference/android/os/PowerManager.html#goToSleep(long)
Вот успешный пример реализации одной и той же вещи на устройстве, поддерживающем более низкие значения яркости экрана (я тестировал на планшете Allwinner Chinese 7 «, на котором работает API15).
Если кто-то еще попытается это сделать, комментарий PLS ниже, если он работал / не работал и устройство Android API.
// Файл пользовательского манифеста
Лучший способ сделать это (используя укороченные устройства):
Теперь у нас есть две функции:
Извините за мой плохой английский.
У меня не было бы надежды на «пробуждение экрана» в этой деятельности. Если экран выключен, активность, вероятно, находится в состоянии паузы и не должна содержать какой-либо код.
Когда вы просыпаетесь, возникает проблема блокировки экрана. Я не знаю, как любое приложение может автоматически обойти lockscreen.
Вам следует рассмотреть возможность запуска фоновых задач в службе, а затем с помощью диспетчера уведомлений отправить уведомление, когда все обнаружено. Уведомление должно предоставлять оповещение о каком-либо устройстве (пробуждение экрана, значок уведомления, уведомление и т. Д.). При нажатии на уведомление он может начать намерение начать свою деятельность.
Вы также можете попытаться запустить операцию прямо из службы, но я действительно не знаю, включит ли это экран или обойдется экран блокировки.
Что касается документации Android, ее можно достичь, используя следующую строку кода:
Я добавил это в мой метод onCreate и он отлично работает.
По ссылке вы найдете разные способы достижения этого и общее объяснение.
Чтобы включить экран:
Вернуться к экрану по умолчанию: просто снимите флаг FLAG_KEEP_SCREEN_ON
Бывают случаи, когда экран необходимо отключить ПОЛНОСТЬЮ. Если энергопотребление не очень важно для вашего приложения, класс PowerManager можно использовать в следующих случаях:
- Используйте PowerManager.goToSleep (), чтобы отключить отображение экрана.
- Используйте PowerManager.wakeUp (), чтобы включить экран.
- Используйте PowerManager.isScreenOn (), чтобы получить состояние включения / выключения экрана. В качестве альтернативы для этой цели используйте PowerManager.isInteractive () или Display.getState ().
В следующем примере кода показано, как реализовать это решение:
Вышеупомянутый код был протестирован на встроенном устройстве под управлением Android 4.4.2 (API уровня 19).
Обратите внимание, что некоторые из этих методов API не могут быть найдены в документации API Android, и вам необходимо указать соответствующие разрешения, такие как DEVICE_POWER.
Источник