Android: как управлять кнопкой домой
Мы пытаемся предоставить приложение дочери моего соседа с умственными и физическими недостатками, которое позволит ей использовать планшет Android в качестве говорящего, то есть она нажимает несколько больших кнопок, и устройства генерируют речь. Приложение в основном представляет собой WebView и дополнительный объект в Javascript, используемый для выполнения и управления генерацией речи, а также некоторую логику для обработки изменений ориентации. HTML-файлы создаются в автономном режиме для ее конкретного расположения говорящих предметов. Мы также добавили некоторые возможности воспроизведения музыки и просмотра изображений, чтобы сделать устройство более привлекательным для нее.
Проблема в том, что кнопка "Домой" возвращает ее в безумие экрана запуска Android, и что на тестовом устройстве (Archos 70) кнопка "Домой" не является физической кнопкой, а отображается на самом сенсорном экране, что делает ее слишком легкой для случайно ударил его.
Поэтому я бы хотел вернуться в панель запуска Android, нажав последовательность "домой", "назад", "домой", без каких-либо других действий между ними.
Могу ли я добиться этого, превратив само приложение в панель запуска? Как я могу затем вернуться к исходному пусковому устройству в последовательности home, back, home? Кажется, это глубоко уходит во внутренности Android, а?
Единственная подсказка, которую я нашел до сих пор, - кнопка Overriding Home для приложения замены Car Home, но она имеет значение -1 и, как сообщается, работает только в эмуляторе. Также я сомневаюсь, что смогу полностью отказаться от первоначального модуля запуска, так как в противном случае больше не будет доступа, например, к элементу управления USB-устройства, позволяющего загружать новые HTML-файлы, уничтожать и перезапускать приложение и так далее.
Я тоже готов пойти на клудж. Может быть, может быть запущена фоновая служба, которая при необходимости снова выведет приложение на фронт?
2 ответа
Могу ли я добиться этого, превратив само приложение в панель запуска? Как я могу затем вернуться к исходному пусковому устройству в последовательности 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, а новое намерение. Простое нажатие кнопки "Назад" и отображение подсказки, вероятно, является безопасным / хорошим подходом.
Кнопка Home не может быть переопределена. Вы можете написать приложение, которое отвечает домашним намерениям (это то, что делает пусковая установка), но это все.