
Можно долго спорить насчет преимуществ и недостатков блокировки экрана в Андроид, однако не всем и не всегда она нужна. Мы расскажем вам, каким образом эту функцию следует правильно отключать.
Выключение блокировки экрана в Android
Для того чтобы полностью выключить какой-либо вариант screenlock, проделайте следующее:
- Зайдите в «Настройки» вашего девайса.

- Найдите пункт «Экран блокировки» (иначе «Экран блокировки и безопасность»).

Тапните по этому пункту. - В данном меню следует зайти в подпункт «Блокировка экрана».

В нем выберите опцию «Нет».
Если у вас ранее был установлен какой-либо пароль или графический ключ, то потребуется его ввести. - Готово – блокировки теперь не будет.
Эту настройку нужно отключить на своем Android телефоне | Отключаем скрытый гугл сервис за 1 минуту!
Естественно, чтобы этот вариант сработал, нужно помнить пароль и рисунок ключа, если вы его устанавливали. Что же делать, если отключить блокировку не получается? Читайте ниже.
Возможные ошибки и проблемы
Ошибок при попытке отключения screenlock, может быть две. Рассмотрим их обе.
«Отключено администратором, политикой шифрования или хранилищем данных»
Такое случается, если в вашем устройстве есть приложение с правами администратора, не разрешающее отключать блокировку; вы купили б/у девайс, который когда-то был корпоративным и в нем не удалены вшитые средства шифрования; вы блокировали устройство с помощью сервиса поиска от Google. Попробуйте проделать такие действия.

-
Пройдите по пути «Настройки»—«Безопасность»—«Администраторы устройства» и отключайте приложения, напротив которых стоит галочка, затем пробуйте отключить блокировку.

Забыли пароль или ключ
Тут уже сложнее – как правило, самостоятельно справиться с такой проблемой непросто. Можете попробовать следующие варианты.
- Зайдите на страницу сервиса поиска телефона в Google, она расположена по адресу https://www.google.com/android/devicemanager. Потребуется войти в аккаунт, используемый на устройстве, блокировку на котором хотите отключить.
- Оказавшись на странице, щелкните мышью (или тапните, если зашли с другого смартфона или планшета) по пункту «Заблокировать».

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

Затем нажмите «Заблокировать».

На девайсе будет принудительно активирована блокировка паролем.
Разблокируйте устройство, затем переходите в «Настройки»—«Экран блокировки». Вероятно, что вам дополнительно понадобится удалить сертификаты безопасности (смотрите решение предыдущей проблемы).
В качестве итога отметим следующее – отключать screenlock устройства все-таки не рекомендуется в целях безопасности.
Источник: lumpics.ru
Lock Screen — блокировщик экрана на Android

Lock Screen – программа со свободным распространением для блокировки гаджетов Android. Утилита размещает на экране девайса кнопку, которая будет располагаться поверх всех окон. Если на нее кликнуть устройство заблокируется.
Разработали приложение создатели программы GO Launcher EX. Используя это приложение, можно легко заблокировать Android-устройства, при этом не трогая кнопку питания.
Клавишу блокировки можно размещать в любом месте экрана. Если она будет мешать смотреть фильм или играть в игры, убрать ее можно нажатием на нее и удерживанием пальца, пока кнопка не скроется в панели уведомлений. Иногда могут возникать проблемы с деинсталляцией софта, поскольку утилита требует некоторые права администратора. Для ее удаления требуется запустить приложение Uninstall onekey lock.
Как работает программа?
После инсталляции программы требуется активировать его и возле пунктов Onekey lock enable и Suspended icon поставить ON. Для автоматического запуска приложения после перезагрузки гаджета необходимо включить пункт Displayed after reboot.
Возможности
Приложение при работе практически не использует оперативную память. Кроме того, кнопка полупрозрачная, что не мешает при работе с другими приложениями.
Преимущества и недостатки
Данный софт позволяет сохранить кнопку питания в целости. Кроме того, клавишу приложения можно переносить в любое место. Помимо этого, виджет располагается поверх всех окно.
Из отрицательных моментов стоит отметить отсутствие русскоязычной локализации. Кроме того, удаляется программа не совсем стандартным способом. Помимо этого, устанавливать утилита можно на устройства Android версии 2.2 и выше.
В общем, если появилось желание сохранить кнопку питания смартфона в целости или она расположена в неудобном месте, тогда это приложение может отлично подойти. А проблема с удалением программы возникает только по причине плохого знания собственного телефона.
Среди аналогичных разработок можно отметить приложение Screen Off and Lock, которое обладает большим количеством возможностей. Кроме того, можно прибегнуть к помощи программы ABC Lock, в котором можно изменять стиль клавиши блокировки.
Скачивать данный софт необходимо только с официального магазина Google Play, чтобы получить качественную утилиту, к тому же безопасную, что сохранит работоспособность смартфона.
Похожие статьи:
- Таймер выключения компьютера, описание программы
- Программа для ускорения компьютера
- Программа для моделирования интерьера квартиры — хороший помощник в разработке дизайна
- SYSTEM UTIL Dashboard — программа для мониторинга смартфона
- Password Boss — приложение для хранения данных
Источник: computerologia.ru
Как я писал кастомный локер

Привет хабрастарожилам от хабрановичка. Ровно год назад я решил написать кастомный локер (экран блокировки) для моего старичка 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 стокового локера.
public synchronized void show() < if (DEBUG) Log.d(TAG, «show(); mKeyguardView==» + mKeyguardView); if (mKeyguardHost == null) < if (DEBUG) Log.d(TAG, «keyguard host is null, creating it. «); mKeyguardHost = new KeyguardViewHost(mContext, mCallback); final int stretch = ViewGroup.LayoutParams.MATCH_PARENT; int flags = WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN | WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER | WindowManager.LayoutParams.FLAG_KEEP_SURFACE_WHILE_ANIMATING /*| WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR*/ ; if (!mNeedsInput) < flags |= WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM; >WindowManager.LayoutParams lp = new WindowManager.LayoutParams( stretch, stretch, WindowManager.LayoutParams.TYPE_KEYGUARD, flags, PixelFormat.TRANSLUCENT); lp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN; lp.windowAnimations = com.android.internal.R.style.Animation_LockScreen; lp.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_NOSENSOR; lp.setTitle(«Keyguard»); mWindowLayoutParams = lp; mViewManager.addView(mKeyguardHost, lp); > if (mKeyguardView == null) < if (DEBUG) Log.d(TAG, «keyguard view is null, creating it. «); mKeyguardView = mKeyguardViewProperties.createKeyguardView(mContext, mUpdateMonitor, this); mKeyguardView.setId(R.id.lock_screen); mKeyguardView.setCallback(mCallback); final ViewGroup.LayoutParams lp = new FrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); mKeyguardHost.addView(mKeyguardView, lp); if (mScreenOn) < mKeyguardView.onScreenTurnedOn(); >> mKeyguardHost.setVisibility(View.VISIBLE); mKeyguardView.requestFocus(); >
Что ж, все гениальное – просто. Решил повторить этот код для своего приложения и получил ошибку – нет нужного permission. Немного погуглив, добавил следующие разрешения: SYSTEM_ALERT_WINDOW и INTERNAL_SYSTEM_WINDOW. Это не помогло.
Вернулся к изучению класса PhoneWindowManager.java:
public int checkAddPermission(WindowManager.LayoutParams attrs) < int type = attrs.type; if (type < WindowManager.LayoutParams.FIRST_SYSTEM_WINDOW || type >WindowManager.LayoutParams.LAST_SYSTEM_WINDOW) < return WindowManagerImpl.ADD_OKAY; >String permission = null; switch (type) < case TYPE_TOAST: // XXX right now the app process has complete control over // this. should introduce a token to let the system // monitor/control what they are doing. break; case TYPE_INPUT_METHOD: case TYPE_WALLPAPER: // The window manager will check these. break; case TYPE_PHONE: case TYPE_PRIORITY_PHONE: case TYPE_SYSTEM_ALERT: case TYPE_SYSTEM_ERROR: case TYPE_SYSTEM_OVERLAY: permission = android.Manifest.permission.SYSTEM_ALERT_WINDOW; break; default: permission = android.Manifest.permission.INTERNAL_SYSTEM_WINDOW; >if (permission != null) < if (mContext.checkCallingOrSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) < return WindowManagerImpl.ADD_PERMISSION_DENIED; >> return WindowManagerImpl.ADD_OKAY; >
Для требуемого окна 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:
public class KeyguardMediator < WindowManager windowManager; KeyguardHost keyguardHost; KeyguardView keyguardView; Context context; boolean isShowing; String[] prefShortcutsArray; String prefScreenLock; String prefUnlockEffect; String prefPatternPassword; boolean prefMultipleWidgets; boolean prefShortcuts; boolean prefHelpText; boolean prefPatternVisible; boolean prefWallpaper; boolean drawWallpaperView; boolean drawWallpaperViewSqueeze; public KeyguardMediator(Context con)< context = con; windowManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE); // Этот класс ко всему прочему хранит еще и настройки >void onResume() < if(keyguardView != null)< keyguardView.onResume(); >> void onPause() < if(keyguardView != null)< keyguardView.onPause(); >> void show() < if(isShowing)< visibility(true); return; >keyguardView = new KeyguardView(context, this); isShowing = true; int flags = WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN; if(!drawWallpaperView) < flags |= WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER; >int format = PixelFormat.OPAQUE; if(!drawWallpaperView) < format = PixelFormat.TRANSLUCENT; >WindowManager.LayoutParams lp = new WindowManager.LayoutParams(WindowManager.LayoutParams.FILL_PARENT, WindowManager.LayoutParams.FILL_PARENT, WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, flags, format); if(drawWallpaperView) < lp.windowAnimations = android.R.style.Animation_Toast; // Можно использовать только стандартную анимацию >lp.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_NOSENSOR; lp.setTitle(«Custom keyguard»); keyguardHost = new KeyguardHost(context); keyguardHost.addView(keyguardView); windowManager.addView(keyguardHost, lp); > void hide() < if(!isShowing)< return; >isShowing = false; keyguardHost.setVisibility(View.GONE); // Прежде чем удалить View необходимо сделать его невидимым, тогда он исчезнет с анимацией windowManager.removeView(keyguardHost); keyguardHost = null; keyguardView = null; > void visibility(boolean visible) < // Во время звонка View становится невидимым keyguardHost.setVisibility(visible ? View.VISIBLE : View.GONE); if(keyguardView != null)< if(visible)< keyguardView.onResume(); >else < keyguardView.onPause(); >> > void startWidgetPicker() < // Запускает activity выбора виджетов >void finishWidgetPicker() < // Перенаправляет результат layout’у с виджетами >void destroy() < if(keyguardHost != null)< windowManager.removeView(keyguardHost); keyguardHost = null; keyguardView = null; >> >
Дальше история становится менее интересной, так сказать, будничной. На мой локер можно добавлять ярлыки приложений (здесь все стандартно и просто) и виджеты (а вот этот момент достоин отдельной статьи).
Теперь все стало выглядеть современней:


Заключение
Данным постом я не хотел себя пропиарить. Это не руководство для написания локеров. Я лишь просто хотел показать, как человек, поленившийся прочитать хотя бы одну книгу по основам Java, но практикующийся в написании программок в течении двух лет, может исхитриться для получения конкретного результата.
Источник: habr.com