Переопределение кнопки «Домой» - как мне избавиться от выбора? - PullRequest
20 голосов
/ 17 января 2010

При создании одного намерения, чтобы 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 ]

28 голосов
/ 17 января 2010

Невозможно навсегда переопределить кнопку «Домой» без подтверждения пользователем.

Один аргумент в пользу того, почему это так, - это аргумент безопасности. Кнопка «Домой» - это единственный способ, которым пользователь может гарантированно выйти из любого приложения. Если бы вы могли заставить кнопку «Домой» запускать приложение вместо экрана «Домой» без подтверждения пользователем этого изменения, было бы очень легко написать вредоносное приложение, которое захватило телефон пользователя.

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

Кроме того, вы действительно хотите переопределить Home? Дом похож на кнопку аварийного выхода. Двойное нажатие кнопки «Домой» всегда возвращает пользователя на центральную панель главного экрана, поэтому независимо от того, какое приложение оно запускает, пользователю легко вернуться туда, где он знает. Вы не должны переопределять это, если вы не производите полную замену Home.

5 голосов
/ 19 апреля 2012
@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);    
}
1 голос
/ 22 ноября 2016

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#onUserLeaveHint()

1 голос
/ 10 марта 2010

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

Существует по крайней мере 1 приложение, которое я скачал, которое, кажется, делает именно это. Когда пользователь выходит из приложения, оно восстанавливает обычные домашние настройки пользователя по умолчанию. Приложение четко указывает пользователям выбрать Launcher в качестве дома по умолчанию и никогда не делать этого с самим приложением. У него есть несколько различных методов «выхода», которые дают пользователю выбор, в какой дом вернуться, если у них есть несколько, и тот, который просто выходит из обычного режима по умолчанию.

Я тоже исследую это и сообщу о прогрессе и источнике.

0 голосов
/ 30 июня 2014

Использовать onUserLeaveHint ()

onUserLeaveHint () является защищенным методом, как и другие методы жизненного цикла операции, и если вы обрабатываете onUserLeaveHint, он позаботится о следующем случае

  1. Когда пользователь нажимает клавишу Home
  2. Когда пользователь нажимает клавишу возврата
  3. Когда пользователь нажимает на панель оповещений

Здесь вы можете поймать нажатие кнопки Homeb.

Гудлак. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...