2014-11-18 2 views
0

Ive работал над этим довольно долгое время, но не может найти решение.Lock down android app

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

Прежде всего, причина, по которой мне нужен пользователь, чтобы иметь доступ к спине и дому поэтому они могут вернуться к моему приложению после запуска say ... wifi settings.

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

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

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

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

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

+0

У вас есть возможность сделать это как приложение Launcher? –

+0

В качестве примечания, если вы используете Android 5.0, у вас может быть очень простое решение (есть функция, аналогичная той, которую вы хотите встроить в ОС). – RogueBaneling

ответ

0

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

Мое приложение имеет резьбу, которая работает всегда, даже если не на переднем плане

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

+0

Я могу гарантировать, что на всех этих планшетах будет работать ту же версию андроида. Все они будут поставляться с завода с идентичным программным обеспечением. Ive связался с производством, чтобы посмотреть, будут ли они предлагать 5 штук.0, но это сомнительно. Если все устройства работают с одинаковой версией: 4.2.2 Мысль ... если я использовал 2 приложения ... один, чтобы действовать как пульт, который запускает основное приложение ... поэтому мое приложение может его назвать когда он обнаруживает, что вы оставили необходимый графический интерфейс, чтобы заставить пользователя вернуться? – theshadow124

+0

@ theshadow124 Если ваше приложение когда-либо выходит на задний план, даже на секунду, все это может быть убито, и нечего будет перезапускать. Вы можете сделать это менее вероятным, перезапустив его из переднего плана 'Сервис', но в 4.2 пользователь, вероятно, сможет прокрутить панель задач, долго нажать уведомление службы и убить приложение, не зная, что оно осталось на переднем плане. –