Android: как управлять кнопкой домой - PullRequest
4 голосов
/ 27 июля 2011

Мы пытаемся предоставить приложение дочери моего соседа, страдающей умственными и физическими недостатками, чтобы она могла использовать планшет Android в качестве говорящего, то есть она нажимает несколько больших кнопок, и устройства генерируют речь. Приложение в основном представляет собой WebView и дополнительный объект в Javascript, используемый для выполнения и управления генерацией речи, плюс некоторая логика для обработки изменений ориентации. HTML-файлы создаются в автономном режиме для ее конкретного расположения говорящих предметов. Мы также добавили некоторые возможности воспроизведения музыки и просмотра изображений, чтобы сделать устройство более привлекательным для нее.

Проблема в том, что кнопка «домой» возвращает ее в безумие экрана запуска Android, и что на тестовом устройстве (Archos 70) кнопка «домой» не является физической кнопкой, а скорее отображается на самом сенсорном экране, что делает ее слишком легко случайно ударить его.

Так что я бы хотел вернуться в панель запуска Android только нажатием последовательности домой, назад, домой без других действий между ними.

Могу ли я добиться этого, превратив само приложение в панель запуска? Как я могу затем вернуться к исходному пусковому устройству в последовательности home, back, home? Похоже, это глубоко уходит во внутренности Android, а?

Единственная подсказка, которую я нашел до сих пор, это Кнопка переопределения Home для приложения замены Car Home , но она имеет значение -1 и сообщается, что она работает только в эмуляторе. Также я сомневаюсь, что смогу полностью отказаться от оригинальной пусковой установки, так как в противном случае больше нет доступа, например, к. управление массовым USB-устройством, позволяющее загружать новые HTML-файлы, уничтожать и перезапускать приложение и т. д.

Я тоже готов пойти на клудж. Может быть, можно запустить фоновую службу, которая при необходимости снова выведет приложение на передний план?

Ответы [ 2 ]

4 голосов
/ 27 июля 2011

Кнопка Home не может быть переопределена.Вы можете написать приложение, которое отвечает домашним намерениям (это то, что делает пусковая установка), но это все.

3 голосов
/ 27 июля 2011

Могу ли я добиться этого, превратив само приложение в панель запуска?Как я могу затем вернуться к исходному пусковому устройству в последовательности home, back, home?Похоже, это глубоко уходит во внутренности Android, да?

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

/* This should come from a preference that let's the user select an activity that can handle the HOME intent */
String packageName = "com.android.launcher";
String packageClass = "com.android.launcher2.Launcher";

Intent home_intent = new Intent(Intent.ACTION_MAIN);
home_intent.addCategory(Intent.CATEGORY_HOME);
home_intent.setComponent(new ComponentName(packageName, packageClass));
home_intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
/* Here you should catch the exception when the launcher has been uninstalled, and let the user save themselves by opening the Market or an app list or something. Users sometimes use root apps to uninstall the system launcher, so your fake launcher is all that is left. Might as well give the poor user a hand. */
startActivity(home_intent);

Обнаружение home / back / home немного затруднительно, потому что home не придет как onKeyEvent, а скорее как новое намерение.Простое нажатие кнопки «Назад» с последующим отображением подсказки, вероятно, является безопасным / хорошим подходом.

...