Программный захват намерения HOME

Мне нужно, чтобы моя активность программно обрабатывала нажатие кнопки HOME с помощью приемника, но событие не срабатывает. Однако я могу успешно зарегистрировать и зафиксировать этот фильтр намерений, если объявлю его в разделе активности manifest.xml. Вот код для приемника, который не работает:

BroadcastReceiver br;

br = new BroadcastReceiver() {
       @Override
       public void onReceive(Context context, Intent intent) {
               return;  // I put a breakpoint here to see if this gets called
       }
};


IntentFilter intf = new IntentFilter();
intf.addAction(Intent.ACTION_MAIN);
intf.addCategory(Intent.CATEGORY_HOME);
intf.addCategory(Intent.CATEGORY_DEFAULT);

registerReceiver(br, intf);

Кто-нибудь знает, почему это не фиксирует нажатие кнопки «Домой»?

Кстати, я попытался обойти это, создав другую активность и указав ее фильтр намерений в манифесте. Я установил активность enabled="false" в манифесте, но не мог понять, как включить эту активность во время выполнения. Суть в том, что я хочу зарегистрировать фильтр намерения кнопки «Домой» для своего приложения только тогда, когда мое приложение запущено, и я не могу понять, как это сделать.


person Alex    schedule 09.02.2010    source источник


Ответы (2)


Если вы пытаетесь внедрить замену домашнему экрану, вам нужно, чтобы ваш фильтр Intent был в манифесте — см. пример приложения Home в SDK.

Если вы пытаетесь заблокировать клавишу HOME, не делайте этого.

person CommonsWare    schedule 09.02.2010
comment
Да, это работает в манифесте, но я хочу программно включать/выключать его во время выполнения. Спасибо за вежливость :) - person Alex; 09.02.2010
comment
Да, к сожалению, я не думаю, что это работает. Однако я пропустил часть вашего вопроса: я установил в манифесте действие enabled=false, но не смог понять, как включить это действие во время выполнения. -- вы сможете сделать это с помощью метода setComponentEnabledSetting() PackageManager. - person CommonsWare; 09.02.2010
comment
На самом деле у меня есть дополнительный вопрос. Как я могу использовать setComponentEnabledSetting() для псевдонима активности? Имя компонента требует имени класса, но класс для псевдонима такой же, как класс для targetActivity. - person Alex; 09.02.2010

Никогда не должно быть случая, когда вам нужно переопределить кнопку «Домой», она предназначена для того, чтобы пользователь всегда сохранял контроль над своим телефоном. Что именно ты пытаешься сделать? Если вы хотите определить, когда ваша активность больше не видна, вы должны переопределить onStop().

person pgsandstrom    schedule 09.02.2010
comment
Я хочу добавить свое действие в качестве законного второго источника для нажатия кнопки «Домой», и я могу легко сделать это, если поместю фильтр намерений в раздел действий manifest.xml. Единственное, что я хочу сделать по-другому, это то, что я хочу, чтобы эта функциональность ПО ТРЕБОВАНИЮ, потому что помещение фильтра в действие manifest.xml регистрирует мое действие для нажатия кнопки «Домой», пока приложение установлено, и я не хочу, чтобы это делать тот. - person Alex; 09.02.2010
comment
Toddler Lock на рынке — отличный пример приложения, которое на законных основаниях заменяет кнопку «Домой». - person Jay Askren; 10.02.2010