Възможно ли е да направите активност на 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 на дисплея, показващи интерактивни слайдшоута. Те трябва да бъдат поставени в специални калъфи, които покриват бутоните, за да не могат посетителите да се държат лошо. По подобен начин си представете, че една игра може да прихване бутона Home и да попита потребителя дали желае да запази, преди да излезе. Знам, че съм натискал бутона за начало няколко пъти. - 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