для Android версии 4 (API 14 и выше) можно использовать: getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
однако на эмуляторе он не блокирует кнопку «Домой», так что это бесполезно. я до сих пор не знаю, нормально ли это работает на реальных устройствах.
возможно, можно использовать следующий обходной путь: установить приложение в качестве приложения на главном экране по умолчанию. если кнопка домой была нажата, когда приложение было активным, зафиксируйте ее и ничего не делайте. если кнопка «Домой» была нажата, когда приложение было в фоновом режиме (или закрыто), откройте ранее выбранное домашнее приложение по умолчанию.
в качестве альтернативы я мог бы попросить пользователя установить домашнее приложение запуска по умолчанию как мое при каждом запуске и сбросить его снова (либо до предыдущего, либо до полного сброса) после его закрытия.
Является ли это возможным? если да, то как?
Начиная с Android Lollipop (версия 5.0, которая является API 21), существует способ закрепления экрана, который может быть включен пользователем или приложением (ссылка здесь):
Есть два способа активировать закрепление экрана:
Вручную: пользователи могут включить фиксацию экрана в меню «Настройки» > «Безопасность» > «Закрепление экрана» и выбрать задачи, которые они хотят закрепить, коснувшись зеленого значка булавки на экране «Последние». Программно: чтобы активировать закрепление экрана программно, вызовите startLockTask() из своего приложения. Если запрашивающее приложение не является владельцем устройства, у пользователя запрашивается подтверждение. Приложение-владелец устройства может вызвать метод setLockTaskPackages(), чтобы приложения можно было закреплять без подтверждения пользователя.
Что оно делает? читаем дальше и видим:
Когда блокировка задач активна, происходит следующее:
Строка состояния пуста, а пользовательские уведомления и информация о состоянии скрыты. Кнопки «Домой» и «Недавние приложения» скрыты. Другие приложения не могут запускать новые действия. Текущее приложение может запускать новые действия, если при этом не создаются новые задачи. Когда закрепление экрана вызывается владельцем устройства, пользователь остается привязанным к вашему приложению до тех пор, пока приложение не вызовет stopLockTask(). Если закрепление экрана выполняется другим приложением, которое не является владельцем устройства, или пользователем напрямую, пользователь может выйти, удерживая кнопки «Назад» и «Недавние».
Не только это, но, согласно этот пост, вы также можете переключить это без подтверждения пользователя , и выход из этого особого состояния будет соответствовать логике вашего приложения.
Кажется, это идеальная вещь для безопасного приложения для малышей.
person
android developer
schedule
14.01.2012