Запретить запуск приложения Android

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

Идея очень проста: мы хотим, чтобы пользователь мог использовать ограниченный набор приложений, которые будут предварительно установлены на его мобильном устройстве. Если пользователь попытается запустить неавторизованное приложение, ему будет предложено ввести диалоговое окно с запросом PIN-кода. Если он вводит правильный ПИН-код, он сможет запустить приложение. В противном случае приложение не будет запущено.

Как я уже говорил, все ответы, которые я мог найти там, подразделяются на две категории: "вы не можете этого сделать", и "вы можете это сделать, написав свое приложение для запуска".

Однако я видел приложения, такие как ZDBox, которые позволяют вам делать именно это. То есть, с помощью ZDBox вы можете определить "неавторизованные" приложения таким образом, что если пользователь попытается запустить один из них, ему нужно будет ввести ПИН-код, чтобы фактически запустить приложение. Если он не сможет его предоставить, приложение не запустится. Самое забавное, что ZDBox не требует доступа root для этого.

Итак, мой вопрос: как мы можем запретить запуск других приложений, как это делает ZDBox?

Ответ 1

Вариант 1

Все примеры, которые я видел, включают запуск вашего приложения в качестве замены Launcher/Home Screen. Вот как работают все приложения стиля блокировки для детей. Это имеет преимущество

  • Нажатие кнопки "Главная" не покидает приложение.
  • У вас есть контроль над запуском приложения

Вы можете проверить код андроида Launcher2, чтобы узнать, как работает программа запуска Android. https://android.googlesource.com/platform/packages/apps/Launcher2.git

Вариант 2

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

Подобно тому, как они обнаруживают запуск приложения в Как определить, когда пользователь запускает другое приложение? (Android)