2009-04-09 2 views
9

Я должен активировать блокировку системы андроида (тот, который вы получаете, когда вы нажимаете питания/повесить кнопку). Смотрите здесь:Android - Активация ключа блокировки системы (так называемый экран блокировки)

img

Я уже просмотрел документацию, но все, что я нашел, было PowerManager и KeyguardManager. Оба, похоже, не являются решением :-(.

Итак, все знают, как добиться этого от приложения Android? (Если требуются специальные разрешения, это не проблема, но изменение настроек устройства не является решением. ..)

EDIT: Или кто-то знает, что это, безусловно, не представляется возможным вообще Btw Craigs решение с отправкой ключей больше не работает (см комментарии)

+1

Вы также можете попробовать прыгая на IRC (FreeNode #android) и поговорить с ведущим разработчиком сам –

ответ

2

Я искал ответ на тот же вопрос какое-то время. По-видимому, после 2.0 и выше были удалены привилегии менеджера устройств для уровня приложения. Но с Froyo - 2.2 раскрывается менеджер политики устройства, предоставляющий нам разработчикам множество элементов управления административным уровнем.

http://developer.android.com/guide/topics/admin/device-admin.html

0

Там очень хороший пример здесь?.. :

http://www.anddev.org/throwing-simulating_keystrokes_programatically-t717.html

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

http://developer.android.com/reference/android/view/KeyEvent.html

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

+2

Этот метод больше не доступны, она была удалена по соображениям безопасности. – sooniln

+0

Ah bummer, знаете ли вы о каком-либо другом решении? –

+0

Hmm, Android 1.0/Предстоящие 1.5 - целевая платформа, так что это не сработает :-( –

0

Для того, чтобы активировать это, выкапывая через Android-источник WindowManagerService, который, как представляется, имеет открытый метод (startAppFreezingScreenLocked). Это может быть хорошим местом для поиска вашего ответа, поскольку, к сожалению, это не похоже, что вы можете напрямую получить объект WindowManagerService.

1

Что вы ищете, это reenableKeyguard() метод в KeyguardManager.KeyguardLock мой друг!

+0

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

+0

Возможно, вы неправильно поняли свой вопрос здесь. Является ли это отображением самого SCREEN или активацией блокировки системной клавиши? – sthg

+0

sthg, both :-). Я просто хочу активировать обычный системный замок. Сам экран является частью этого блокировки клавиатуры. Если пользователь активировал код (или шаблон разблокировки), он должен получить запрос об этом коде/шаблоне. Просто блокировки клавиатуры недостаточно :-( –

1

Похоже, функция блокировки экрана выполняется с помощью метода:

public void goToSleep(long time) 

метода в PowerManager.java. Можно получить ссылку на него в этой моде:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 

Однако это требует разрешения

android.permission.DEVICE_POWER 

который является разрешение уровня 2 доступен только в системе.

Похоже, что это не выполнимо. Это только для версии 1.1, я не знаю за 1.5.

+0

Хм, это плохо. На самом деле, я думаю, что этого было бы недостаточно, потому что мне действительно нужна блокировка системного ключа, как вы можете видеть на скриншоте выше. Ничего об этом экране упоминается в документах PowerManager ... Он говорит только, что устройство перейдет в спящий режим, но не будет активировано системное блокирование. –

+1

Не уверен, что это поможет, так как это версия <1.1 источник, но: goToSleep вызывает goToSleep в PowerManagerService, затем goToSleepLocked . затем setPowerState И есть этот комментарий в setPowerState:. // Когда пользователь нажимает на кнопку питания, необходимо всегда послать вне // уведомление о том, что собирается спать так клав продолжается Но // мы не может этого сделать до тех пор, пока экран не исчезнет, t показать keyguard // слишком рано. – JRL

+0

И в LockPatternKeyguardView есть вызов ScreenLock следующим образом: View createLockScreen() { вернуть новый LockScreen ( mContext, mLockPatternUtils, mUpdateMonitor, mKeyguardScreenCallback); } – JRL

Смежные вопросы