Заблокировать приложение для Android

Я работаю над этим в течение довольно долгого времени, но не могу найти решение.

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

В первую очередь причина, по которой мне нужно, чтобы у пользователя по-прежнему был доступ к кнопкам «Назад» и «Домой», заключается в том, что он может вернуться в мое приложение после запуска, скажем, настроек Wi-Fi.

В моем приложении есть поток, который всегда работает, даже если он не находится на переднем плане для обработки данных и тому подобного. Итак, моя первая идея была... давайте определим, какое приложение находится на переднем плане, и если это не мое приложение или небольшой список разрешенных (например, настроек Wi-Fi), тогда убейте приложение и выведите мое приложение на передний план. Но что бы я ни пробовал, ничего не получается...

Сначала я попытался просто имитировать кнопку «Домой» (мое приложение связано с кнопкой «Домой»). Это не работает, если мое приложение является единственным вариантом кнопки «Домой».

Я пытался использовать android.os.Process.killProcess, чтобы убить любое приложение, которое находится на переднем плане... это работает только с очень немногими приложениями.

Я также пытался перезапустить приложение, используя намерение, но это тоже не работает.

Я понимаю, что это в основном связано с тем, что система Android пытается не дать вредоносным приложениям получить контроль над устройством, это приложение не будет распространяться ни на одном рынке.


person theshadow124    schedule 18.11.2014    source источник
comment
Вы думали о том, чтобы сделать это как приложение Launcher?   -  person Vincent D.    schedule 18.11.2014
comment
В качестве примечания, если вы используете Android 5.0, у вас может быть очень простое решение (есть функция, похожая на то, что вы хотите, встроенная в ОС).   -  person RogueBaneling    schedule 18.11.2014


Ответы (1)


Невозможно и крайне ошибочно даже пытаться. Как вы упомянули, в Android 5.0 представлен законный режим киоска (так называемый «закрепление экрана» или «блокировка задач»), который позволяет одному приложению управлять устройством. Я не думаю, что есть какой-либо способ запустить сторонние действия как часть вашей заблокированной задачи. До версии 5.0 уродливый хак для имитации режима киоска заключался в следующем: ">постоянно опрашивать список приложений переднего плана, и, если первое приложение не было в вашем белом списке, отключите намерение средства запуска вашего приложения, чтобы вывести ваше приложение на передний план. Google продолжает придумывать способы, чтобы это не работало; например, когда-то в 4.x они сделали так, чтобы вы могли провести вниз по панели задач над любым «полноэкранным» приложением, что не запустит ваше приложение, понимая, что оно не на переднем плане. Оттуда довольно легко убить все ваше приложение. Они полностью сломали этот хак в 5.0, потому что каждое приложение видит только себя в списке приложений переднего плана.

В моем приложении есть поток, который всегда выполняется, даже если он не на переднем плане.

Вы даже не можете гарантировать это, особенно если вы явно создаете Thread вместо использования компонента Android, такого как IntentService. Android может уничтожить ваши компоненты, если они не находятся на переднем плане, а если в приложении не осталось компонентов, он может убить весь процесс. Таким образом, любое созданное вами Thread может быть внезапно уничтожено без встроенного способа перезапустить его, когда ваше приложение вернется на передний план. Почти никогда не бывает законной причины для явного создания Thread в Android.

person Kevin Krumwiede    schedule 18.11.2014
comment
Я могу гарантировать, что на всех этих планшетах будет установлена ​​одна и та же версия Android. Все они будут поставляться с завода с одинаковым программным обеспечением. Я связался с производителем, чтобы узнать, будут ли они предлагать обновление 5.0, но я сомневаюсь в этом. Если на всех устройствах установлена ​​одна и та же версия: 4.2.2 Мысль... если бы я использовал 2 приложения... одно действовало бы как ланчер, который просто запускает основное приложение... чтобы мое приложение могло вызвать его, когда обнаружит вас оставили предполагаемый графический интерфейс, чтобы заставить пользователя вернуться? - person theshadow124; 18.11.2014
comment
@ theshadow124 theshadow124 Если ваше приложение когда-нибудь перейдет в фоновый режим, даже на секунду, все это может быть убито, и перезапустить его будет нечем. Вы можете сделать это менее вероятным, перезапустив его с переднего плана Service, но в 4.2 пользователь, вероятно, сможет провести вниз по панели задач, нажать и удерживать уведомление службы и закрыть приложение, даже не зная, что оно покинуло передний план. . - person Kevin Krumwiede; 22.11.2014