Подтвердить что ты не робот

Как я могу разблокировать экран программно в Android?

Я работаю над удаленной автоматической тестовой платформой для Android на базе JUnit (тесты запускаются вне android, взаимодействуя с кодом внутри него). Все это работает достаточно хорошо, но одна проблема заключается в том, что когда я автоматически запускаю новый эмулятор, экран начинает блокироваться. Это, по-видимому, влияет на то, что мои тесты могут работать, плюс, я хочу посмотреть, как запускаются тесты (нажатые кнопки, текст и т.д.). Если я вручную запускаю эмулятор и разблокирую его экран, все работает хорошо.

Есть ли способ программно разблокировать экран в Android? API Java, командная строка или команда оболочки и т.д. Все будет в порядке. Запрет, возможно, есть способ запустить разблокированный эмулятор?

4b9b3361

Ответ 1

Вы можете взаимодействовать с эмулятором через консольный интерфейс .

Если вы когда-нибудь задавались вопросом, почему ваш эмулятор начал с номера, например 5554, это потому, что он прослушивает эмулятор.

Вы можете найти порт для запуска эмуляторов с помощью команды adb devices. Он будет выводиться следующим образом:

C:\>adb devices
List of devices attached
emulator-5554   device

Итак, вы можете подключиться к эмулятору, используя команду:

telnet localhost 5554

Если вы успешно подключитесь, вы получите приглашение OK, и вы можете начать вводить команды.

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

event send EV_KEY:KEY_MENU:1 EV_KEY:KEY_MENU:0

EV_KEY:KEY_MENU:1 - это событие key-down, а EV_KEY:KEY_MENU:0 - соответствующее событие для клавиш. Убедитесь, что вы выполняете оба действия, или клавиша Menu будет нажата.

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

Изменить: Я не думаю, что event send EV_KEY:KEY_MENU:1 EV_KEY:KEY_MENU:0 эмулирует Menu, но если я запустил команду сразу после запуска эмулятора, он разблокирует ее. Не знаю, почему, но я думаю, это начало.

Ответ 2

Однострочный, который работает для меня на Android SDK r18 и r20, говорящий с эмулятором 4.0.3 (API 15):

adb shell input keyevent 82

Ответ 3

Я считаю, что следующая ссылка имеет ответ, который вы ищете.

http://developer.android.com/guide/topics/testing/activity_testing.html#UnlockDevice

Разблокировка эмулятора или устройства

Вы можете обнаружить, что тесты пользовательского интерфейса не работают, если главный экран эмулятора или устройства отключен с помощью шаблона блокировки клавиатуры. Это связано с тем, что тестируемое приложение не может получать ключевые события, отправленные sendKeys(). Лучший способ избежать этого - сначала запустить эмулятор или устройство, а затем отключить блокировку клавиатуры для главного экрана.

Вы также можете явно отключить блокировку клавиатуры. Для этого вам нужно добавить разрешение в файл манифеста (AndroidManifest.xml), а затем отключить блокировку клавиатуры в тестируемом приложении. Обратите внимание, однако, что вам нужно либо удалить это, прежде чем публиковать свое приложение, либо отключить его с помощью кода в опубликованном приложении.

Чтобы добавить это разрешение, добавьте элемент в качестве дочернего элемента. Чтобы отключить KeyGuard, добавьте следующий код к методу onCreate() действий, которые вы собираетесь тестировать:

mKeyGuardManager = (KeyguardManager) getSystemService (KEYGUARD_SERVICE); mLock = mKeyGuardManager.newKeyguardLock( "activity_classname" ); mLock.disableKeyguard(); где activity_classname - это имя класса деятельности.

Ответ 4

Попробуйте выполнить script:

echo "event send EV_KEY:KEY_SOFT1:1" | nc -q1 localhost 5554
sleep 0.1
echo "event send EV_KEY:KEY_SOFT1:0" | nc -q1 localhost 5554
sleep 0.1
echo "event send EV_KEY:KEY_SOFT1:1" | nc -q1 localhost 5554
sleep 0.1
echo "event send EV_KEY:KEY_SOFT1:0" | nc -q1 localhost 5554
sleep 0.1

Ответ 5

Мне удалось сделать это с помощью оболочки:

adb shell
#input keyevent 82

Ответ 6

Самый простой способ разблокировать экран (при отсутствии пароля) - передать событие KEYCODE_MENU; однако, если экран уже разблокирован, это фактически откроет меню, которое, вероятно, не является той функциональностью, которую вы ищете.

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

adb shell input keyevent KEYCODE_POWER; adb shell input keyevent KEYCODE_MENU

(Примечание: 82, который появляется в других ответах, является константой KEYCODE_MENU.)

Ответ 7

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

adb shell input keyevent 26

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

adb shell input keyevent 82

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