Как включить блокировку задач на производственных устройствах Android 5.0

12

В этом вопросе StackOverflow рассказывается, как включить приложение для владельцев устройств и, таким образом, режим киоска в предварительном просмотре приложений для Android Android. Поскольку для этого метода требуется сборка Android с отладкой пользователем, рутирование устройства и копирование файла XML в корневую файловую систему, он не подходит для массового развертывания однофункционального устройства Android внутри компании.

Как будут устанавливаться приложения для владельцев устройств на производственных устройствах Android L?

Адриан Кокс
источник
ты решил проблему?
Котиос
1
Проверьте это stackoverflow.com/questions/26906210/…
Spynet
Спасибо @Spynet - кажется, это наиболее полное резюме решения.
Адриан Кокс
1
Посмотрите здесь для хорошего руководства с src: objectpartners.com/2014/11/04/…
Хейден Тринг

Ответы:

14

( Изменить: обновлено после еще нескольких испытаний)

Проверьте последнюю документацию .

Эта функция теперь называется «закрепление экрана», и приложение не обязательно должно быть владельцем устройства. Если владелец устройства не установлен, пользователю будет предложено принять. Но есть проблемы с этим для использования киоска, упомянутые ниже.

Есть два способа активировать закрепление экрана:

Вручную: пользователи могут включить закрепление экрана в меню «Настройки»> «Безопасность»> «Закрепление экрана» и выбрать задачи, которые они хотят закрепить, прикоснувшись к зеленому значку закрепления на экране последних. Программно: чтобы программно активировать закрепление экрана, вызовите 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");
}
tagy22
источник
Я думаю, что это самый лучший ответ из доступных на данный момент. Шаг NFC остается загадкой, но это гораздо более узкий вопрос.
Эдриан Кокс
Я пытался заставить шаг NFC работать, но безуспешно, я задал вопрос здесь . Также есть запрос на добавление функции в Google для улучшения закрепления экрана для использования в киоске здесь
tagy22
1

Я не могу комментировать ответ, который немного раздражает, но дополняет ответ tagy22, который вы можете использовать, dpmчтобы установить владельца устройства. Подробнее здесь .

Трой Патрик
источник
1
dpmне выполнит работу, если на устройстве установлена ​​учетная запись (например, учетная запись Google).
Повелитель огня
Будет ли NFC в этом случае? У меня сложилось впечатление, что владелец устройства должен быть установлен до периода добавления учетной записи.
Трой Патрик