- Как я писал кастомный локер
- Изучаем исходники
- Версия один
- Версия два
- Android: как включить и выключить экран программно?
- ОТВЕТЫ
- Ответ 1
- Ответ 2
- Ответ 3
- Ответ 4
- Ответ 5
- Ответ 6
- Ответ 7
- Ответ 8
- Ответ 9
- Ответ 10
- Ответ 11
- Ответ 12
- Ответ 13
- Ответ 14
- Ответ 15
- Ответ 16
- Top Ways to Set Custom Lock Screen on Android Smartphones and Tablets
- Part 1 : Lock screen settings for Android
- Part 2 : Top 5 app to custom lock screen
- Top 1: Picturesque Lock Screen
- Top 2: Hi Locker
- Top 3: CM Locker
- Top 4: AcDisplay
- Top 5: LokLok
- Conclusion
Как я писал кастомный локер
Привет хабрастарожилам от хабрановичка. Ровно год назад я решил написать кастомный локер (экран блокировки) для моего старичка Samsung Galaxy Gio в стиле популярного тогда Samsung Galaxy s3. Какие причины заставили меня это сделать, писать не буду, но добавлю лишь то, что в Google Play я программу не собирался выкладывать и каким-либо другим способом заработать на ней не планировал. Данный пост посвящен последствиям моего решения.
Начну издалека. Многие хвалят Android за открытость и возможность заменить и настроить встроенные программы под свои нужды. Что тут сказать? В сравнении с другими популярными ОС, это, безусловно, так, но если копнуть глубже в архитектуру Android возникают трудности и вопросы. Локскрин (в Android это называется keyguard) как раз и вызывает вопросы: почему Google не поступили с ним, так как с лаунчерами, почему не сделали диалог со всеми доступными на устройстве локерами и с возможностью выбрать нужный по умолчанию? Где-то в глубине мозга тихим нерешительным голосом кто-то отвечает: может быть Google (Android Ink. если быть точнее) поступил так из соображений безопасности. Этот голос вероятно прав и многим разработчикам локеров и мне (скромность не позволила приписать себя к их числу) пришлось изобретать велосипед, и не один.
Изучаем исходники
Начал я с использования одного из плюсов Android – из изучения исходников. Я один из тех консерваторов, которые уже 2,5 года сидят на стоковой прошивке (2.3.6), поэтому и исходники изучал соответствующие. Классы, отвечающие за блокировку экрана, лежат в android.policy.jar, что в system/framework. Первоначальной целью было найти «точку входа», т.е. где и когда вызывается локер. Искал здесь.
В классе PhoneWindowManager.java есть метод screenTurnedOff(int why), который вызывает одноименный метод класса KeyguardViewMediator. Проследив, кто кого вызывает, я нашел метод в классе KeyguardViewManager, создающий непосредственно View стокового локера.
Что ж, все гениальное – просто. Решил повторить этот код для своего приложения и получил ошибку – нет нужного permission. Немного погуглив, добавил следующие разрешения: SYSTEM_ALERT_WINDOW и INTERNAL_SYSTEM_WINDOW. Это не помогло.
Вернулся к изучению класса PhoneWindowManager.java:
Для требуемого окна TYPE_KEYGUARD нужно второе из моих добавленных разрешений. Задней точкой тела начал ощущать, что не все так просто, как я себе представлял. Решено было посмотреть на описание этого permission. Вот выдержка из AndroidManifest.xml пакета framework-res.apk.
Вот она – черная полоса в жизни. Ведь я понимал, «signature» – это значит, что использовать этот пермишн может только пакет, подписанный тем же ключом, что и пакет, выдавший это разрешение (в нашем случае — framework-res.apk). Ладно, достаем инструменты для изготовления велосипедов.
Версия один
Первым решением было использовать activity в качестве локскрина. На stackoverflow советуют использовать следующий код:
Признаюсь, в первых версиях я использовал этот метод. У него есть существенные недостатки: статусбар не блокируется, начиная с версии API11 этот метод не работает.
Решение первого недостатка (переполнениестека опять помогло) следующее. Поверх статусбара с помощью WindowManager рисуется прозрачный View, который перехватывает все TouchEvent. Вот служба, реализующая это:
Второго недостатка для меня не существовало, на Gingerbread данный код работал превосходно. На 4pda, куда я опрометчиво выложил свое творение, пользователи жаловались, что на многих телефонах мой локер сворачивался как обычное приложение. Для них найдено такое решение. В качестве стандартного лаунчера устанавливается пустышка. При нажатии кнопки HOME система вызывает мой лаунчер-пустышку. Если кастомный локер активен, лаунчер сразу же закрывается в методе onCreate(), т.е. визуально нажатие кнопки HOME ни к чему не приводит. Если кастомный локер не активен, мой лаунчер тут же вызывает другой правильный лаунчер, который пользователь указал в настройках.
Вот код пустышки:
Выглядело это следующим образом:
Эти велосипеды ездили долго и хорошо, пока я не решил сделать «правильный» локскрин, и уже в стиле Samsung Galaxy S4.
Версия два
Когда системе необходимо запускать кастомный локер? Очевидно, что при выключении экрана. Создадим службу, регистрирующую BroadcastReceiver, т.к. из манифеста данный фильтр не работает.
Необходимо учесть две особенности:
1. Служба должна быть запущена в момент загрузки устройства. Создадим BroadcastReseiver с IntentFilter «android.intent.action.BOOT_COMPLETED». Есть одно НО: служба при запуске должна отключить стандартную блокировку экрана. Особенностью Android является то, что стандартное окно ввода PIN-кода является частью стокового экрана блокировки. Поэтому служба должна запускаться только когда PIN буден введен.
Максимум, на что хватило моей фантазии:
2. Проанализировав PhoneWindowManager видно, что в метод screenTurnedOff(int why) передается переменная why, принимающая 3 значения:
— экран выключился по истечению таймаута (в этом случае стоковый локер запускается с задержкой),
— экран выключился при срабатывании сенсора приближения (во время телефонного разговора),
— экран выключился при нажатии кнопки.
В моем случае такого разнообразия нет. Поэтому служба мониторит состояние телефона, и при входящем звонке или во время разговора экран не блокируется.
Вот основной код службы:
Идея не использовать activity, а использовать WindowManager была еще сильна. Из пяти типов окон, использующих разрешение SYSTEM_ALERT_WINDOW, мне подошел TYPE_SYSTEM_ALERT. Причем у него были очевидные достоинства: блокировался статусбар (по крайней мере, на Gingerbread) и перехватывалось нажатие кнопки HOME (работает даже на Jelly Bean).
Промежуточным звеном между службой и KeyguardView является класс KeyguardMediator:
Дальше история становится менее интересной, так сказать, будничной. На мой локер можно добавлять ярлыки приложений (здесь все стандартно и просто) и виджеты (а вот этот момент достоин отдельной статьи).
Теперь все стало выглядеть современней:
Источник
Android: как включить и выключить экран программно?
Прежде чем отмечать этот пост как «дубликат», я пишу этот пост, потому что никакая другая почта не имеет решения проблемы.
Я пытаюсь выключить устройство, а затем через несколько минут или сменить датчик, снова включите его.
Отключить показания дисплея
Я могу отключить экран, используя:
Мне не удалось отключить экран, используя метод wl.release().
Включить проверку дисплея
Мое первое предположение, как показано ниже, не работает. Ничего не происходит, экран остается выключенным.
Я также попытался использовать wakelocks, без успеха.
Наконец, я пробовал следующее, без результата.
В целом, я не получаю никаких ошибок в консоли для любого из этих методов. Мой тестовый текст «Экран должен быть включен», находится на экране, когда я включаю устройство с помощью кнопки питания. Это показывает, что код должен работать. Пожалуйста, ответьте только, если вы протестировали код, кажется, что многие из функций, таких как params.screenBrightness = -1 , не работают так, как должны, согласно sdk.
ОТВЕТЫ
Ответ 1
Я собираюсь предположить, что вы хотите, чтобы это действовало, пока ваше приложение находится на переднем плане.
Не выключает экран в традиционном смысле. Это делает экран настолько тусклым, насколько это возможно. В стандартной платформе существует предел того, насколько он может быть тусклым; если ваше устройство действительно позволяет экрану полностью отключиться, то это определенная особенность реализации этого устройства, а не поведение, которое вы можете рассчитывать на разных устройствах.
Фактически использование этого в сочетании с FLAG_KEEP_SCREEN_ON означает, что вы никогда не позволяете экрану отключиться (и, следовательно, устройство переходит в режим с низким энергопотреблением), даже если конкретное устройство позволяет вам установить яркость экрана на полный -off. Имейте это в виду. Вы будете использовать гораздо больше энергии, чем если бы экран был действительно выключен.
Теперь, чтобы вернуть экран к обычной яркости, просто установите значение яркости:
Я не могу объяснить, почему это не заменит ранее установленное значение 0. В качестве теста вы можете попытаться установить принудительную полную яркость, чтобы заставить эту конкретную яркость:
Это определенно работает. Например, приложения Google Книги используют это, чтобы вы могли установить яркость экрана при использовании книги, а затем при обычной выдержке вернуться к обычной яркости.
Чтобы отладить, вы можете использовать «окно dumpsys оболочки adb», чтобы увидеть текущее состояние вашего окна. В данных для вашего окна он скажет вам текущие LayoutParams, которые были установлены для него. Убедитесь, что вы действительно на самом деле находитесь.
И снова FLAG_KEEP_SCREEN_ON — это отдельная концепция; он и яркость не оказывают прямого воздействия друг на друга. (И не было бы причин снова устанавливать флаг при отмене яркости, если вы уже установили его при установке яркости на 0. Флаг останется установленным до тех пор, пока вы его не измените.)
Ответ 2
Я написал этот метод, чтобы включить экран после блокировки экрана. Он отлично работает для меня. Попробуйте it-
И назовите этот метод из onResume() .
Ответ 3
Я бы предложил следующее:
Флаг ACQUIRE_CAUSES_WAKEUP объясняется следующим образом:
Обычные блокировки от бодрствования фактически не включают подсветку. Вместо, они заставляют освещение оставаться включенным после его включения (например, из активность пользователя). Этот флаг заставит экран и/или клавиатуру немедленно включается, когда приобретается WakeLock. Типичное использование будет для уведомлений, которые важны для пользователя, чтобы видеть немедленно.
Кроме того, убедитесь, что у вас есть следующее разрешение в файле AndroidManifewst.xml:
Ответ 4
Привет, надеюсь, это поможет:
Ответ 5
//Файл манифеста пользователя
Ответ 6
Вы уверены, что запросили правильное разрешение в вашем файле манифеста?
Вы можете использовать класс AlarmManager 1, чтобы сбить намерение, которое начинает вашу деятельность, и получает блокировку слежения. Это включит экран и сохранит его. Освобождение wakelock позволит устройству самостоятельно спать.
Вы также можете взглянуть на использование PowerManager, чтобы установить устройство в режим сна: http://developer.android.com/reference/android/os/PowerManager.html#goToSleep(long)
Ответ 7
Вот успешный пример реализации того же самого, на устройстве, которое поддерживает более низкие значения яркости экрана (я тестировал на планшете Allwinner Chinese 7 «с API15).
Если кто-то еще это попробует, комментарий PLS ниже, если он работал/не работал и устройство Android API.
Ответ 8
Лучший способ сделать это (с использованием корневых устройств):
Теперь у нас есть две функции:
Извините за мой плохой английский.
Ответ 9
Это работает над Marshmallow
Ответ 10
Чтобы включить экран:
Возврат к режиму по умолчанию: просто очистите флаг FLAG_KEEP_SCREEN_ON
Ответ 11
Если ваше приложение является системным приложением, вы можете использовать PowerManager.goToSleep() для выключения экрана, вам требуется специальное разрешение
перед использованием goToSleep() вам нужно использовать отражение так же, как:
Теперь вы можете использовать goToSleep(), чтобы выключить экран.
Это то, что происходит при нажатии клавиши питания для выключения экрана.
Ответ 12
У меня не было бы надежды на «пробуждение экрана» в действии. Если экран выключен, действие, вероятно, находится в состоянии паузы и не должно содержать никакого кода.
При просыпании возникает проблема блокировки экрана. Я не знаю, как любое приложение может автоматически обойти lockscreen.
Вам следует рассмотреть возможность запуска фоновых задач в службе, а затем с помощью диспетчера уведомлений отправить уведомление, когда все обнаружено. Уведомление должно предоставлять какое-либо предупреждение устройства (пробуждение экрана, значок уведомления, уведомление и т.д.). При нажатии на уведомление он может запустить намерение начать свою деятельность.
Вы также можете попытаться запустить действие непосредственно из службы, но я действительно не знаю, включит ли это экран или обойдется экран блокировки.
Ответ 13
Что касается документации Android, ее можно достичь, используя следующую строку кода:
Я добавил это в мой метод onCreate , и он отлично работает.
В ссылке вы найдете разные способы достижения этого и общее объяснение.
Ответ 14
или позвоните по телефону
на родительском представлении.
Ответ 15
В соответствии с Android API 28 и выше вам нужно сделать следующее, чтобы включить экран
Ответ 16
Бывают случаи, когда экран необходимо отключить ПОЛНОСТЬЮ. Если энергопотребление не очень важно для вашего приложения, класс PowerManager может использоваться в следующих случаях:
- Используйте PowerManager.goToSleep(), чтобы отключить отображение экрана.
- Используйте PowerManager.wakeUp(), чтобы включить экран.
- Используйте PowerManager.isScreenOn(), чтобы получить состояние включения/выключения экрана. Кроме того, для этой цели используйте PowerManager.isInteractive() или Display.getState().
В следующем примере кода показано, как реализовать это решение:
Данный код был протестирован на встроенном устройстве под управлением Android 4.4.2 (API уровня 19).
Обратите внимание, что некоторые из этих методов API не могут быть найдены в документации API Android, и вам необходимо указать соответствующие разрешения, такие как DEVICE_POWER.
Источник
Top Ways to Set Custom Lock Screen on Android Smartphones and Tablets
Posted by Bill Farrell May 28, 2021 16:21
Today, people hand their smartphones all times. The likelihood of left handset behind a bar, restaurant, or other place is pretty high. Plus, there are chances that phone get stolen. The first line of defense against privacy leakage is your lock screen. Most people just set up simple PIN passcode or pattern and keep using it for several years.
In fact, you have more lock screen settings on Android to enhance your device security. Want to improve security measure on your Android device? All you need to do is to spend a few minutes to read this post. We share a full guide of lock screen settings in this post.
Part 1 : Lock screen settings for Android
As it mentioned before, you have more than one option to choose from for your lock screen. And they offer different levels of security. Follow the steps below to do lock screen settings for Android properly.
Step 1 : Unlock your Android phone, open the «Settings» app from your app drawer, go to «Security» > «Screen Lock», you will be presented all options available.
Step 2 : Generally speaking, «Slide», «Password», «PIN» and «Pattern» are available to most Android phones. Android Ice Cream Sandwich and above equipped «Face Unlock» and Android N allows you to set «Smart Lock» for trusted devices, for example, unlock your phone in your car. And latest Android phone models include Fingerprint lock technology.
Important tips of lock screen settings:
1. Which screen lock is best or most secure? The answer may be various to different people. Slide is the most insecure screen lock, which is almost equivalent to non-lock. It is difficult to tell password and pattern. From probability, password is more secure than pattern, for example, a 5-point pattern has maximum 15,120 permutations, while a 5-character password offers 6 million possibilities.
2. And if you are using Android O/N/M/L, you can hide important messages and notifications from your lock screen. This prevents others from reading your information on lock screen.
3. The Smart Lock feature is available to the latest Android systems. You can set up trusted locations or linked devices to unlock standard PIN automatically.
4. From Android 4.4, users are allowed to add widgets on their lock screen to display weather, clock, schedule, notes and more without going into your home screen. But it also means that everyone could see the information without hacking your phone.
5. You can change the background of your lock screen. But if you want to get a custom lock screen, some third party apps are helpful.
6. Google Find My Device is the successor of Android Device Manager. Once install your Google account on your phone, you can remotely lock or unlock your device easily.
Part 2 : Top 5 app to custom lock screen
In this part, we will share top 5 best apps to set custom lock screen on Android devices.
Top 1: Picturesque Lock Screen
1. Released by Microsoft and makes Android lock screen similar to Windows 10.
2. Get new background from Bing.
3. Display search bar, camera, flashlight and other tools on your lock screen.
4. Disable or enable each feature as you wish.
5. Available in Google Play Store for fre.
6. Optimized to run on All Android devices from major manufacturers.
1. The custom options are limited compared to other custom lock screen apps.
2. This app is more suitable to beginners, but advanced users may find it is boring.
Top 2: Hi Locker
1. Lock screen on old versions of Android as the modern systems.
2. Offer three unlock styles, Classic, Lollipop, and iOS.
3. Support latest screen unlock technology, such as Samsung’s Fingerprint.
4. Change, add or delete wallpaper for your lock screen easily.
5. Turn off the lock screen automatically when connecting to certain Wi-Fi network.
6. Display or hide new messages, notifications or other information on lock screen.
1. This custom lock screen app eats up your battery when screen locked.
2. Though it is free to download in Google Play, some features need to purchase in app.
Top 3: CM Locker
1. Get HD wallpaper and themes for customizing your lock screen for free.
2. Support pattern, fingerprint screen and PIN lock screen secures.
3. Add lock on apps to prevent others from checking your photos, videos, messages and contacts.
4. Take photos of intruders and send it to your email immediately.
5. Save battery life and boost the performance on your phone in one tap.
6. All features are free to use.
1. You have to view annoying ads to exchange custom lock screen.
2. Some features are not necessary.
Top 4: AcDisplay
1. Another free way to show a minimal, beautiful lock screen on Android phones.
2. Get notifications and open them on your lock screen directly.
3. Set inactive hours to save battery life when your phone is in low power.
4. Make blacklist to avoid data leakage effectively.
5. Fully control your notifications displaying or hiding on lock screen.
6. Free of charge while offering in app purchases.
1. The custom options are limited in this custom lock screen app.
Top 5: LokLok
1. Contact with your friends right on your phone’s lock screen.
2. Open camera, take a picture, draw something on it and leave it to your friend when they check the device.
3. Replace Android lock screen with a whiteboard.
4. Create a group and share pictures between your family and friends without unlocking screen.
5. Lightweight and easy to use.
1. This custom lock screen app has limited features and custom options.
2. It needs an internet connection when working.
Conclusion
In this post, we talked about lock screen settings on Android smartphones. As the security measure for handsets, screen lock is important for everyone. It is able to protect your information and privacy.
On the other hand, wrong settings may leak your data as well. So, you’d better read our guide and set lock screen correctly. If you want to make a customized lock screen, the best custom lock screen apps we shared are good options. They are all available in Google Play and you can pick up your favorite one based on our reviews.
Источник