Android - Можно ли отключить нажатие кнопки «Домой»

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

Любые предложения высоко ценятся


person Vinayak Bevinakatti    schedule 29.01.2010    source источник
comment
Да, я согласен с вашими комментариями, но мое требование является гениальным, так как приложение имеет некоторые функции по умолчанию, которые я говорю умный обмен своим телефоном, например, я передаю свой телефон своему ребенку, он должен иметь возможность делать все, что есть в моем приложении на только одним щелчком мыши приложение не должно быть прекращено без моего разрешения. Вы должны предоставить аутентификацию для завершения приложения.   -  person Vinayak Bevinakatti    schedule 30.01.2010
comment
Хорошим примером является Todler Lock.   -  person Jay Askren    schedule 31.01.2010
comment
@ Джей Аскрен, да, это хороший пример. У вас есть идеи о подсказке кода для этого.   -  person Vinayak Bevinakatti    schedule 01.02.2010
comment
К сожалению, нет. Прости.   -  person Jay Askren    schedule 01.02.2010
comment
@JohnFeminella: хорошо, вы думаете об Android на личных устройствах, но как насчет корпоративного устройства, вы не хотите, чтобы пользователи блуждали по вариантам, а просто использовали одно приложение?   -  person m0skit0    schedule 05.09.2012
comment
Я думаю, вы можете найти свой ответ здесь stackoverflow.com/a/23349558/2540947   -  person Lê Quang Duy    schedule 28.04.2014


Ответы (6)


Я почти уверен, что Toddler Lock просто использует BroadcastReciever и прослушивает Intent.ACTION_MAIN и категорию Intent.CATEGORY_HOME — поэтому, когда вы впервые запускаете его, он предлагает вам установить флажок «использовать это приложение по умолчанию» и заставляет вас выбрать блокировку малыша.

Таким образом, на самом деле он вовсе не блокирует кнопку «Домой», а просто настраивает себя в качестве приемника вещания по умолчанию для:

Intent i = new Intent(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_HOME);

Когда вы запускаете Toddler Lock, он, вероятно, устанавливает внутренний флаг, и если вы нажмете кнопку «Домой», он просто выведет окно на передний план. Если флаг не установлен, вероятно, он явно запускает Launcher.

Я надеюсь, что в этом есть смысл. Это всего лишь теория, но я почти на 100% уверен, что именно так это и делается.

person synic    schedule 16.04.2010
comment
Извините за комментарий к этому старому, но просто чтобы исправить некоторую путаницу - вы не можете получать startActivity() Intents через широковещательный приемник. Однако другое действие может объявить себя действием HOME, что позволит пользователю выбрать реализацию домашнего экрана при нажатии кнопки HOME. - person CommonsWare; 28.06.2011

Добавьте следующий код в свою активность:

@override

public void onAttachedToWindow()
{  
       this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);     
       super.onAttachedToWindow();  
}

Изменить:

Это работает во всех старых версиях Android. Но не будет работать в ICS и драже и приведет к сбою в приложении.

Что означает этот 4-строчный код Java в Android приложение?

person Jeffrey    schedule 16.06.2011
comment
Хотя это работает, чтобы отключить кнопку «Домой», в моем случае он отображает экран блокировки поверх моей активности. Я пытаюсь заменить экран блокировки, поэтому мне нужно отключить кнопку «Домой». - person Josh; 13.07.2011
comment
Интересно @Josh, какой телефон ты используешь, на дроиде, невероятно, ария. И какая ОС, здесь 2.2 - person Idistic; 13.07.2011
comment
Я тестировал на своем Thunderbolt, который работает под управлением CM7 (2.3.4). - person Josh; 14.07.2011
comment
Работал на моем планшете Acer под управлением 3.1 - person shanabus; 09.09.2011
comment
К счастью, этот недостаток безопасности был исправлен в более новых версиях Android. - person CommonsWare; 13.10.2012

Добавьте это в свой manifest.xml для своей основной деятельности:

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.HOME" />

Кнопка HOME всегда (повторно) запускает вашу активность. Работает во Фройо.

person Jean-François    schedule 21.06.2011
comment
Я дал +1, потому что это предотвращает выход, но меня попросили выбрать, является ли мое приложение средством запуска по умолчанию ?? Планшет Acer 3.1 - person shanabus; 09.09.2011
comment
Это плохое решение, и оно просто помечает ваше приложение как средство запуска. Люди могут по ошибке переключить свой лаунчер по умолчанию на ваше приложение. Вы не хотите этого. - person zeh; 08.08.2013

здесь вы можете найти мой образец приложения для Android, который сохраняться на главной странице. Кнопка «Домой», «Назад», «Вызов» и «Питание» отключены. Пользователь может закрыть приложение, только введя пароль.

person davide.gironi    schedule 30.04.2012
comment
Пользователь должен выбрать домашний менеджер по умолчанию, когда закончит это приложение. - Не очень полезно, если все, что вы хотите, это отключить кнопки только для вашего собственного приложения, не испортив пусковые установки. - person AndroidDev; 25.08.2013
comment
Было бы предпочтительнее просто вставить соответствующий код в ответ, чем заставлять людей открывать почтовый индекс и искать код. - person Chloe; 10.09.2013
comment
нерелевантный ответ .. это приложение портит кнопку запуска дома - person Srikanth Pai; 15.11.2013

Я нашел способ справиться с клавишей HOME. Для вашего приложения установите манифест как

<action android:name="android.intent.action.MAIN" /> 
<category android:name="android.intent.category.HOME" /> 
<category android:name="android.intent.category.DEFAULT" />                            
<category android:name="android.intent.category.MONKEY"/>

Теперь ваше приложение является альтернативным приложением Launcher.

Используйте adb и отключите приложение запуска с помощью диспетчера пакетов.

pm disable com.android.launcher2

Теперь нажатие клавиши «Домой» всегда останется на том же экране.

person amiekuser    schedule 27.12.2010
comment
Я знаю, что это действительно старый вопрос, но почему это имеет отношение к проблеме среды выполнения? Я не уверен, что вы можете программно отключить пусковую установку (удивлен, если бы вы могли) или даже должны. - person Idistic; 13.07.2011
comment
Этот ответ, похоже, не помогает, извините - person shanabus; 09.09.2011
comment
На самом деле, это работает, но для этого нужны системные привилегии. Вместо adb для отключения лаунчера по умолчанию. Это также можно сделать в код . - person Yeung; 30.05.2014
comment
Этот cmd 'pm disable com.android.launcher2' является ошибкой: Ошибка: java.lang.IllegalArgumentException: Неизвестный пакет: com.android.launcher . - person AmyNguyen; 17.02.2020

Еще одно дополнение к сообщению Джеффриса, вот то, что сработало для меня (и все еще позволяет полупрозрачную тему)

@Override
public void onAttachedToWindow()
{  
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);     
    super.onAttachedToWindow();  
}

Поскольку это вызывает блокировку клавиатуры, вы также можете просто отключить блокировку клавиатуры, пока приложение используется:

KeyguardManager keyguardManager = (KeyguardManager)getSystemService(KEYGUARD_SERVICE);
KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE);
lock.disableKeyguard();

Это очень хорошо работает для создания собственного приложения для защиты клавиатуры.

person Richard Rout    schedule 05.09.2011