безопасное приложение для малышей на андроиде

У меня есть приложение, которое должно быть безопасным для малышей. Это означает, что он блокирует любое касание одной клавиши, но обрабатывает долгое нажатие для выхода из приложения. Это делается для того, чтобы малыш был в безопасности от (слишком) неприятных вещей во время игры. До версии 2.3.4 мне это удалось. Однако теперь у меня есть 2 проблемы:

  1. В сотах у меня есть уведомления в строке состояния, на которые можно нажимать. Кроме того, у меня есть клавиша переключения окон, которую можно нажать. Единственное, что у меня с ней получилось, так это затемнить строку состояния.
  2. На бутерброде с мороженым (используя эмулятор, у меня до сих пор нет реального устройства с этой версией) при вызове следующего кода я получаю исключение, которое даже не может быть поймано. исключение:

    java.lang.IllegalArgumentException: тип окна нельзя изменить после добавления окна.

код:

@Override
public void onAttachedToWindow()
  {
  this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
  super.onAttachedToWindow();
  }

Что я могу сделать?


person android developer    schedule 09.11.2011    source источник
comment
Как вы блокируете нажатия на клавишу домой?   -  person slayton    schedule 10.11.2011
comment
@slayton ты пробовал то, что я только что написал? это написано в классе активности.   -  person android developer    schedule 11.11.2011
comment
@androiddeveloper Я также получаю ту же ошибку в своем приложении, и я также использую тот же код onAttachedTowindow () ... как вы решили эту проблему?   -  person Jeegar Patel    schedule 22.09.2012
comment
есть способ заблокировать домашний ключ, который очень проблематичен (поскольку он требует, чтобы ваш код был полностью свободен от ошибок, и поскольку он ломает представление о домашнем ключе как о тревожной кнопке). это применяется в некоторых приложениях, таких как приложение widgetLocker.   -  person android developer    schedule 22.09.2012
comment
более безопасным способом было бы сделать приложение также средством запуска.   -  person android developer    schedule 22.09.2012
comment
@androiddeveloper см. stackoverflow.com/questions/12560180/   -  person Jeegar Patel    schedule 24.09.2012
comment
похоже, что механизм блокировки, используемый в widgetLocker и других приложениях для блокировки, больше не работает. возможно, Google исправил ОС, поэтому она не может работать.   -  person android developer    schedule 29.09.2012


Ответы (2)


для 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

Для меня ниже код скрывает кнопку «Домой» в ICS (версия 4.4.4)

public void onCreate(Bundle savedInstanceState) {
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION);
            super.onAttachedToWindow();
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

    }
person Sundeep Sharma    schedule 13.03.2015
comment
Как вы нашли это решение? - person android developer; 14.03.2015