Кнопка Android Instrumentation HOME

Любая идея, почему отправка ключа HOME в приложение под управлением Instrumentation ничего не делает?

import android.app.Instrumentation; import android.view.KeyEvent; public class MyInstrumentation extends Instrumentation { public void sendKeys() { // Works reliably this.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK); // Does nothing, nothing is printed to logcat this.sendKeyDownUpSync(KeyEvent.KEYCODE_HOME); } } 

Это то же самое при использовании Robotium, а также при непосредственном использовании Instrumentation . Поведение одинаково на эмуляторе и не-корневом устройстве.

Кнопка дома не будет работать в инструментах, и даже если бы это было сделано, это оставило бы вас в положении, которое не слишком благоприятно. Android Instrumentation может обрабатывать только собственный процесс, что означает, что вы не сможете вернуться к своему приложению, как только оно будет отправлено, и, возможно, хуже будет немного не детерминированным, поскольку Android сможет закрыть ваш процесс, если он так ощущается Что приведет к завершению ваших тестов.

Это не очень полезно для вас, правда? Я подозреваю, что вы пытаетесь проверить что-то, что связано с жизненным циклом активности, который можно увидеть здесь . Это может быть проверено с помощью инструментария, но не таким простым способом, как вы этого хотели. Если вы посмотрите на документы API для класса приборов ( здесь ), вы увидите множество полезных методов в виде callActivityXXX (Activity activity), где XXX соответствует событию жизненного цикла, которое вы хотите выполнить.

Это немного более трудолюбиво, используя эти методы, чем домашняя перезагрузка. Я подозреваю, что вы хотите, но это позволяет вам разбить свое тестирование на более низкий уровень, чтобы ваше приложение делало правильные действия на каждом этапе, что сделает его более надежным По прошествии времени (скажем, тест сохраняет свое состояние onPause и снова загружает его снова в onResume).

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

 solo.setActivityOrientation(Solo.LANDSCAPE); solo.setActivityOrientation(Solo.PORTRAINT); 

Это приведет к тому, что ваша деятельность будет уничтожена и возобновлена, тестируя некоторые, но не все состояния жизненного цикла деятельности.

Я не считаю, что ключ HOME можно моделировать или программно выполнять. Насколько я понимаю, это чисто специфическое событие для платформы, к которому приложения не привязаны. Я знаю, если бы вы переопределили onKeyDown() что вам никогда не будет известно о KeyEvent.KEYCODE_HOME

Я считаю, что вы можете запустить Intent с категорией CATEGORY_HOME, но я этого не пробовал.

В качестве альтернативы, если вы пытаетесь проверить что-то вроде жизненного цикла активности, возможно, вы можете имитировать изменение конфигурации; Таких как изменение ориентации. Или, если вы беспокоитесь о просто остановке Activity, возможно, вы можете вызвать this.finish() где this Activity.