Переопределение кнопки "Главная" - как мне избавиться от выбора?

При создании одного Intent, чтобы MyActivity реагировал на пользователя, нажав кнопку Home, легко с помощью разметки 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". Однако, когда я добавил свою собственную деятельность, я всегда задаю вопрос.

Да, я знаю, что я могу проверить "Использовать это как стандартный" -checkbox, но это не то, что я хочу прямо сейчас. Итак, вопрос заключается в следующем: могу ли я заставить систему переопределить все остальное и всегда использовать MyActivity по умолчанию?

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

Любые идеи были бы замечательными.

Ответ 1

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

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

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

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

Ответ 2

@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);    
}

Ответ 3

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

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

Я также изучаю это и буду отчитываться о достигнутом прогрессе и источнике.

Ответ 4

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

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

  • Когда пользователь нажимает домашний ключ
  • Когда пользователь нажимает клавишу
  • Когда пользователь нажимает строку оповещения

Здесь вы можете щелкнуть кнопку мыши на кнопке Homeb.

Гудлак.:)

Ответ 5

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 onPause() callback. 
     */
}

Источник: https://developer.android.com/reference/android/app/Activity.html#onUserLeaveHint()