Як увімкнути блокування завдань на пристроях Android 5.0


12

Це запит StackOverflow розглядає, як увімкнути додаток власника пристрою та, таким чином, режим кіоску, у попередньому попередньому перегляді розробника Android L. Оскільки метод вимагає побудови користувачем налагодження Android, вкорінення пристрою та копіювання файлу XML у кореневу файлову систему, він не здається підходящим для масового розгортання одного функціонального пристрою Android всередині компанії.

Як додатки власників пристрою встановлюватимуться на виробничих пристроях Android L?


Ви вирішили питання?
КОТІОС


Дякуємо @Spynet - здається, це найповніше резюме рішення.
Адріан Кокс

1
дивіться тут гарний посібник з src: objectpartners.com/2014/11/04/…
Hayden Thring,

Відповіді:


14

( Редагувати: оновлено після ще кількох тестувань)

Перевірте останню документацію .

Ця функція, схоже, зараз називається закріплення екрана, і додаток не повинен бути власником пристрою. Якщо власник пристрою не встановлений, користувачеві буде запропоновано прийняти. Але є проблеми з цим для використання в кіосках, згадані нижче.

Є два способи активації закріплення екрана:

Вручну: користувачі можуть увімкнути фіксацію екрана в Налаштуваннях> Безпека> Закріплення екрана та вибрати завдання, які вони хочуть зафіксувати, торкнувшись зеленої піктограми шпильки на екрані вступників. Програмно: Щоб активувати фіксацію екрана програмно, зателефонуйте startLockTask () зі свого додатка. Якщо запитуючий додаток не є власником пристрою, користувачеві буде запропоновано підтвердити. Власник пристрою пристрою може зателефонувати на метод setLockTaskPackages (), щоб дозволити програму зафіксувати без кроку підтвердження користувача.

Якщо ви активуєте закріплення екрана програмно (на додаток, що не є власником пристрою) або на пристрої, використовуючи штифт у вхідних даних, ви отримуєте таку поведінку:

З'являється діалогове вікно, яке запитує користувача, чи хоче він активувати фіксацію екрана та чи хоче він вимагати пароль для виходу. Якщо вони натискають так, рядок стану та повідомлення зникають, кнопки повернення, будинок та вхідні дані НЕ зникають. При натисканні на будинок або на екрані з’являється тост, повідомляючи користувачеві про вихід із закріплення екрана.

Потім користувач може утримувати натискання і виходити, щоб вийти із закріплення екрана. Якщо користувач обрав потрібний пароль, він буде виведений прямо на заблокований екран. Така поведінка означає, що він не підходить для кіоску-іммо. Оскільки для користувачів кіоску занадто просто, щоб переглядати заблокований екран.

Для отримання належного режиму кіоску нам потрібно встановити власника пристрою. Документація 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");
}

Я думаю, що це найкраща можлива відповідь на даний момент. Крок NFC залишається загадкою, але є набагато вужчим питанням.
Адріан Кокс

Я намагався отримати ступінчасту роботу NFC , але не мав ніякого успіху, я почав питання про це тут . Також є запит на функцію від Google для поліпшення фіксації екрана для використання кіоску тут
tagy22

1

Я не можу коментувати відповідь, яка неприємно, але доповнює відповідь tagy22, яку ви можете використовувати dpmдля встановлення власника пристрою. Детальніше тут .


1
dpmне вдасться виконати роботу, якщо на пристрої встановлено обліковий запис (наприклад, обліковий запис Google).
Firelord

Чи буде NFC у цьому випадку? Мені здалося, що власника пристрою потрібно було встановити до того, як додавати обліковий запис.
Трой Патрік
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.