( Изменить: обновлено после еще нескольких испытаний)
Проверьте последнюю документацию .
Эта функция теперь называется «закрепление экрана», и приложение не обязательно должно быть владельцем устройства. Если владелец устройства не установлен, пользователю будет предложено принять. Но есть проблемы с этим для использования киоска, упомянутые ниже.
Есть два способа активировать закрепление экрана:
Вручную: пользователи могут включить закрепление экрана в меню «Настройки»> «Безопасность»> «Закрепление экрана» и выбрать задачи, которые они хотят закрепить, прикоснувшись к зеленому значку закрепления на экране последних. Программно: чтобы программно активировать закрепление экрана, вызовите startLockTask () из вашего приложения. Если запрашивающее приложение не является владельцем устройства, у пользователя запрашивается подтверждение. Приложение владельца устройства может вызвать метод setLockTaskPackages (), чтобы приложения могли быть прикреплены без шага подтверждения пользователя.
Если вы активируете закрепление экрана программно (приложение, не принадлежащее владельцу устройства) или на устройстве, используя пин-код, то вы получите следующее поведение:
Появляется диалоговое окно, спрашивающее пользователя, хотят ли они включить закрепление экрана и хотят ли они запрашивать пароль для выхода. Если они нажимают «Да», строка состояния и уведомления исчезают, кнопки «Назад», «Домой» и «Последние» НЕ исчезают. Нажатие на дом или последние делает тост, чтобы сообщить пользователю, как выйти из закрепления экрана.
Затем пользователь может удерживать нажатой клавишу «Recen», чтобы выйти из режима закрепления экрана. Если пользователь выбрал запрос на ввод пароля, он будет отправлен прямо на экран блокировки. Такое поведение означает, что он не подходит для киоска Imo. Поскольку пользователям киоска слишком легко в конечном итоге смотреть на экран блокировки.
Чтобы получить правильный режим киоска, нам нужно установить владельца устройства. Документация Google говорит, что вам нужно сделать это с NFC:
Чтобы развернуть и активировать владельца устройства, необходимо выполнить передачу данных NFC из приложения для программирования на устройство, пока устройство находится в его незапланированном состоянии.
Использование NFC для этого кажется немного сложным (что, если на устройстве нет NFC?). Я еще не исследовал это, так что если кто-нибудь может предоставить информацию о том, как вы настраиваете владельца устройства с помощью NFC? Который сейчас становится главным вопросом вашего вопроса. (т.е. установка владельца устройства на нерутируемое устройство)
Но чтобы подтвердить поведение, как и ожидалось, если вы рутируете устройство, вы можете установить владельца устройства в соответствии с предыдущими инструкциями Google (добавление device_owner.xml), как я упоминал здесь
Теперь вы можете правильно заблокировать приложение, диалоговое окно для принятия пользователем не отображается, когда включено, последние кнопки и кнопка «Домой» исчезают, и пользователь не может покинуть приложение, пока ваше приложение не разблокируется. Правильный режим киоска. Я проверил это на Nexus 7 2013 с последней сборкой Lollipop.
Следующий фрагмент включает блокировку:
mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
mDeviceAdminSample = new ComponentName(this, DeviceAdminSample.class);
if (mDPM.isDeviceOwnerApp(this.getPackageName())) {
Log.d(TAG, "isDeviceOwnerApp: YES");
String[] packages = {this.getPackageName()};
mDPM.setLockTaskPackages(mDeviceAdminSample, packages);
} else {
Log.d(TAG, "isDeviceOwnerApp: NO");
}
if (mDPM.isLockTaskPermitted(this.getPackageName())) {
Log.d(TAG, "isLockTaskPermitted: ALLOWED");
startLockTask();
} else {
Log.d(TAG, "isLockTaskPermitted: NOT ALLOWED");
}