Переопределение кнопки "Домой" - как мне избавиться от выбора?
При создании одного намерения, чтобы MyActivity реагировала на пользователя, нажать кнопку "Домой" легко с помощью разметки XML:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
Я хочу знать, как избежать выбора "какой вид деятельности вы хотите использовать" для главного экрана? HTC заставила "Touch Flo" (Sense) переопределить действие "start" по умолчанию, и у меня никогда не возникало вопроса, хочу ли я обычно использовать "Start" или "TouchFlo". Однако, когда я добавляю свою собственную активность, у меня всегда возникает вопрос.
Да, я знаю, что могу установить флажок "Использовать как стандартный", но это не то, чего я хочу сейчас. Итак, вопрос: могу ли я заставить систему переопределить все остальное и всегда использовать MyActivity по умолчанию?
Далее, я действительно хочу переопределить обычный домашний экран, когда мое приложение работает. Если он не работает, все должно работать как обычно, т.е. MyActivity НЕ должно быть связано с кнопкой "Домой".
Любые идеи будут великолепны.
5 ответов
Вы не можете навсегда переопределить кнопку "Домой" без подтверждения пользователем.
Одним из аргументов в пользу того, почему это так, является вопрос безопасности. Кнопка "Домой" - это единственный способ, которым пользователь может гарантированно выйти из любого приложения. Если бы вы могли заставить кнопку "Домой" запускать приложение вместо экрана "Домой" без подтверждения пользователем этого изменения, тогда было бы очень легко написать вредоносное приложение, которое захватило телефон пользователя.
В качестве альтернативы ваше приложение может содержать дублированный главный экран, на котором собраны данные учетной записи Google пользователя; не так сложно, так как источник доступен. Если ваше приложение может заменить молчание главного экрана по умолчанию, пользователю будет трудно сказать, что это произошло.
Кроме того, вы действительно хотите переопределить Home? Дом похож на кнопку аварийного выхода. Двойное нажатие кнопки "Домой" всегда возвращает пользователя на центральную панель главного экрана, поэтому независимо от того, какое приложение оно запускает, пользователю легко вернуться туда, где он знает. Вы не должны переопределять это, если вы не производите полную замену Home.
@Override
public void onAttachedToWindow()
{
Log.i("TESTE", "onAttachedToWindow");
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
super.onAttachedToWindow();
}
При использовании этого метода кнопка HOME перестает работать в этом упражнении (только в этом упражнении). Затем вы просто переопределяете, как это было обычное событие кнопки (например, кнопка возврата).
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_HOME) {
Log.i("TESTE", "BOTAO HOME");
return true;
}
return super.onKeyDown(keyCode, event);
}
OnUserLeaveHint() может поймать пользователя, нажав кнопку домой.
Это было там с уровня API 3.
@Override
protected void onUserLeaveHint() {
super.onUserLeaveHint();
/*
* Called as part of the activity lifecycle when an activity is about to go into the background
* as the result of user choice. For example, when the user presses the Home key, onUserLeaveHint() will be called,
* but when an incoming phone call causes the in-call Activity to be automatically brought to the foreground,
* onUserLeaveHint() will not be called on the activity being interrupted.
* In cases when it is invoked, this method is called right before the activity's onPause() callback.
*/
}
Источник: https://developer.android.com/reference/android/app/Activity.html
Ну, пользователь все равно должен будет выбрать обычный дом в качестве своего дома с использованием по умолчанию, чтобы остановить возврат приглашения. Тем не менее, я полагаю, что после этого вы можете каким-то образом изменить системные настройки, чтобы ваша конкретная деятельность рассматривалась как домашняя по умолчанию, так что нажатие домашней кнопки ничего не будет делать или будет казаться заблокированным для пользователя в основном действии, и я понимаю, что вы хотите, чтобы ваш пользователь мог выполнять другие действия оттуда, быстро возвращаясь к этой корневой панели запуска. Я полностью вижу выгоду от этого, и это может даже выиграть от того, что я разрабатываю, если я решу реализовать несколько экранов виджетов, между которыми пользователь может переключаться влево или вправо.
Я загрузил по крайней мере 1 приложение, которое, похоже, делает именно это. Когда пользователь выходит из приложения, он восстанавливает обычные домашние настройки пользователя по умолчанию. Приложение инструктирует пользователей очень явно выбирать Launcher в качестве дома по умолчанию и никогда не делать этого с самим приложением. У него есть несколько различных методов "выхода", которые дают пользователю выбор, в какой дом вернуться, если у них есть несколько, и тот, который просто выходит из обычного режима по умолчанию.
Я также исследую это и сообщу о прогрессе и источнике.
Используйте onUserLeaveHint ()
onUserLeaveHint () - это защищенный метод, как и другие методы жизненного цикла операции, и если вы обрабатываете onUserLeaveHint, он позаботится о следующем случае
- Когда пользователь нажимает клавишу Home
- Когда пользователь нажимает клавишу возврата
- Когда пользователь нажимает на панель сообщений
Здесь вы можете поймать нажатие кнопки Homeb.
Удачи.:)