Можно ли сделать активность HoneyComb незакрываемой?

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

До сих пор я перезаписывал onBackPressed(), чтобы предотвратить завершение действия, но пользователи по-прежнему могут нажимать другие кнопки в строке состояния, а также выходить из приложения через всплывающие уведомления.

Любые предложения или возможные решения?

Спасибо


person JackMahoney    schedule 21.02.2012    source источник


Ответы (3)


1. Сделайте свою активность полноэкранной.

2 Используйте alarmManager для запуска вашей активности из службы с регулярным интервалом, скажем, 2 или 3 секунды (только если ваша активность не находится на переднем плане). Для этого используйте логическую переменную и сохраните ее с помощью sharedPreference. это значение будет true в onReume и false в onPause, onStop или onDestroy. И затем начинайте свою деятельность только со своей службы, если логическая переменная имеет значение false. Теперь, если ваш пользователь нажмет кнопку «Домой», AlaramManager снова начнет вашу деятельность.

3 Сделайте специальную кнопку для завершения обслуживания и активности, а также для отмены alarmManager.

person Sunny    schedule 21.02.2012
comment
Спасибо за предложения, я попробую их и вернусь к вам - person JackMahoney; 22.02.2012

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

person onit    schedule 21.02.2012
comment
С другой стороны, это может быть очень полезно, если не злоупотреблять. Например, у нас есть телефоны Android и iPhone, демонстрирующие интерактивные слайд-шоу. Они должны быть помещены в специальные футляры, закрывающие кнопки, чтобы посетители не могли нарушать правила. Точно так же представьте, что игра может перехватывать кнопку «Домой» и спрашивать пользователя, хотят ли они сохраниться перед выходом. Я знаю, что несколько раз нажимал кнопку «Домой». - person Ozzah; 21.02.2012
comment
@Ozzah Для интерактивных слайд-шоу вы можете заблокировать экран и столько пользовательского интерфейса на экране, сколько захотите. Идея игры заключается в том, почему Android всегда пытается воссоздать действие точно таким, какое оно есть. Я знаю, что это ложится огромным бременем на разработчика, управляющего данными экземпляра, когда приложениям не хватает памяти, но такова модель. Разрешение разработчику создавать приложение, из которого пользователь никогда не сможет выйти без перезагрузки телефона или какой-либо сумасшедшей техники, которая может быть не интуитивно понятной, может привести к плохому взаимодействию с пользователем. Я не говорю, что его нельзя отключить по уважительной причине, но я понимаю, почему они этого не позволяют. - person onit; 21.02.2012

Я разрабатываю аналогичное приложение, которое работает в режиме «киоск» для розничных магазинов. Когда приложение запускается, оно программно скрывает системную панель, чтобы вы не могли выйти. Системный бар восстанавливается при перезагрузке планшета. Однако для этого требуется root / su.

person Aaron    schedule 02.03.2012
comment
Это интересная идея. Какие библиотеки для этого требуются и какие вызовы методов вы делаете на устройстве с root/su? - person JackMahoney; 06.03.2012
comment
Вызов, чтобы убить системную панель: proc = Runtime.getRuntime().exec(new String[]{"su","-c","service call activity 79 s16 com.android.systemui"}); однако это работало только на Honeycomb. - person Aaron; 09.02.2013