Временно установить дом для Android

У меня есть приложение, которое использует CATEGORY_HOME, поэтому, когда вы нажимаете кнопку «Домой», оно держит вас в моем приложении. После того, как пользователь выбирает мое приложение в качестве дома по умолчанию, оно устанавливается для всего устройства.

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

Активность определяется как домашняя в манифесте:

<activity
        android:name=".home"
        android:label="@string/title_activity_main" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.HOME" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

А вот как я иду домой и как я его ставлю:

Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);

person Nick    schedule 29.11.2012    source источник
comment
Вы не можете программно переключить домашний обработчик, но вы можете использовать явное намерение на реальное, когда не хотите вступать во владение. Тем не менее, позволить это слишком много, чтобы требовать от пользователя в обычных обстоятельствах.   -  person Chris Stratton    schedule 03.12.2012
comment
Есть способы сделать то, о чем я прошу, но я думаю, что у меня есть другая идея. Спасибо за ваш вклад :)   -  person Nick    schedule 03.12.2012


Ответы (1)


Почему вы настраиваете категорию HOME в своем манифесте? Вы можете переопределить поведение домашнего нажатия, переопределив:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_HOME)) {
        Toast.makeText(this, "Home button pressed!", Toast.LENGTH_LONG).show();                     
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

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

ИЗМЕНИТЬ

Только что проверил, не работает на моем устройстве, но похоже, что если вы переопределите onAttachedWindow() и отключите HOME, это может помочь. Просто не забудьте переназначить ключ с помощью onKeyDown() (точно так же, как указано выше этого редактирования).

@Override
public void onAttachedToWindow() {  
    getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
    super.onAttachedToWindow();  
}
person Rotemmiz    schedule 03.12.2012