Intereting Posts
Ошибка при открытии редактора макета Android Eclipse Как удалить строку динамических символов из строки? Есть ли способ отличить Android Activity onResume от главного экрана? Элементы RecyclerView исчезают после переключения между фрагментами Не удалось создать мост отладки Не удалось обнаружить версию adb. Синтаксическая ошибка: ")" Обновление платформ-инструментов с 23.0.1 по 23.1.0 Линукс-32 бит вызывает проблему Не могу использовать PowerManager goToSleep APi в android Как обновить значение столбца базы данных базы данных android sqlite до значения null, используя ContentValues? Платеж In-App в амазонке Отслеживать загрузку данных FTP в android? Команда не понимается Zebra iMZ320 Nexus 5 не будет отображаться в Eclipse Facebook – отложить на стене от приложения для Android Кордова 2.1.0 (PhoneGap) создает скрипт для Android, который говорит, что «Проект уже существует» или «Произошла ошибка. Удаление проекта " Как вы очищаете ArrayAdapter? Автомасштабирование текста TextView для вставки в пределах границ

Кнопка 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.