Android kiosk mode обмеження за правилами і без

Android kiosk mode обмеження за правилами і без

Кіоски оточують нас всюди. Звичайно, сьогодні мова не піде про ларьках, в яких можна купити морозиво або лимонад - ми поговоримо про мобільних інформаційних кіосках.

Звичайний інформаційний кіоск являє собою термінал з встановленим програмним забезпеченням, з яким користувач може здійснювати обмежений набір дій. Найпоширеніші приклади: банкомати, фотокабінках, автомати з продажу квитків, автомати для видачі талончиків в чергу і інші.

Мобільні кіоски

Мобільні кіоски використовуються, наприклад, в якості електронних меню в ресторанах, довідників для продавців-консультантів, для демонстрації модельного ряду в магазинах одягу або автосалонах. При цьому використання девайса в неробочих цілях виключено.

Щоб пристрій запрацював в режимі кіоску, на ньому запускається програма, яка блокує функціонал ОС і не дає користувачеві вийти з програми.

Додатки-кіоски можуть мати засекречену адміністративну панель або конфигурироваться з сервера віддалено. Також можна налаштувати систему звітів: додаток буде відправляти на сервер статистику про поведінку користувача і інформувати адміністратора про свій стан.

Команда Azoft займалася створенням додатків. працюючих як kiosk mode для Android-пристроїв. У цій статті ми обговоримо підводні камені розробки додатків-кіосків і способи вирішення виникаючих проблем.

Режим кіоску в Android

Щоб перетворити Android-пристрій в кіоск, для початку необхідно заблокувати всі його кнопки і роз'єми. У цьому випадку найбільш банальним і при цьому найефективнішим рішенням буде помістити девайс антивандальний ящик, що, звичайно, далеко не завжди можливо. Крім того, залишаються статус бар, системні діалоги і віртуальна клавіатура, за допомогою яких можна вийти в настройки. Як же обійти ці труднощі?

Android 5.0: довгоочікуваний API

Почнемо з хороших новин: в Android 5.0 з'явився API під назвою Screen pinning. Pin в перекладі з англійської означає закріпити або пришпилити. Новий API "закріплює" екран і забороняє щоб користувач міг покинути обраної програми. Цей функціонал можна використовувати як при створенні кіосків для обслуговуючого персоналу, так і в розробці навчальних програм для проведення іспитів і оцінки знань.

При активації режиму Screen pinning користувач не переривається системними діалогами і повідомленнями, не має доступу до інших додатків, не може вийти в головний екран і не бачить статус бар.

Активувати режим можна в налаштуваннях або програмними засобами:

  • Дозвольте Screen pinning в настройках, а потім виберіть потрібну програму і закріпіть його, підтвердивши свій вибір.
  • Для програмної активації досить викликати метод startLockTask () і підтвердити включення режиму блокування.

Android до 5.0: як обійти систему?

У більш ранніх версіях Android SDK режим кіоску, на жаль, не передбачений. Немає і цілісного API для організації повного блокування. Тому всі компоненти блокуються окремо і по-різному в різних версіях.

Кастомізація прошивки може істотно спростити реалізацію kiosk mode, але ми пропонуємо кілька технік, які допоможуть заблокувати небажані елементи в версіях Android нижче 5.0, не вимагаючи ні особливої ​​прошивки, ні root-прав.

перезавантаження

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

Це нескладно: описуємо ресивер в маніфесті, даємо дозвіл на отримання повідомлення про перезавантаження пристрою і створюємо підклас broadcast ресивера, який буде запускати наш додаток.

кнопка BACK

Для кнопки Back просто переобумовленої метод.

кнопка HOME

Кнопку HOME неможливо перехопити, тому, щоб запобігти переходу на головний екран при її натисканні, ми вказуємо додаток-кіоск як Launcher. Додаємо в маніфест три рядки:

Тепер при натисканні на кнопку HOME буде пропонуватися вибір між двома лаунчер: нашим і системним. Вибираємо наш додаток в якості лаунчер за замовчуванням - і готово!

кнопка POWER

Кнопка POWER викликає найбільше запитань. Один з хаков, що дозволяють обробити її натискання - задати вікно програми-кіоску в якості екрану блокування. Однак цей спосіб гарантовано спрацює тільки на версіях Android нижче 4.0.

Системні діалоги

Довге натиснення кнопки HOME або POWER викликає системний діалог, за допомогою якого можна вийти з програми. Крім того існують ще вікна оновлення ОС і низького заряду батареї, які теж небезпечні для кіоску, оскільки можуть мати доступ до системних налаштувань.

Щоб повністю позбавитися від системних діалогів ми прописуємо наступне: при втраті фокуса Activity посилає Broadcast - закрити всі системні діалоги.

клавіатура

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

панель статусу

Панель статусу дає широкий спектр можливостей для виходу з програми, тому від неї необхідно позбутися.

Перше, що можна зробити, - поставити додатком повноекранний режим.
До версії 4.0 можна також вказати тип вікна TYPE_SYSTEM_ALERT - в цьому випадку додаток-кіоск буде показуватися поверх всіх системних елементів.

Ще один спосіб - згортати статус бар, як тільки він готовий розвернутися. Для цього необхідно вказати дозвіл в маніфесті.

Починаючи з Android 4.1 для приховування панелі статусу можна використовувати SDK.

Ще один популярний метод: створення прозорого об'єкта View, який перехоплює все кліки, на місці статус бару. Для реалізації потрібно прапор SYSTEM_ALERT_WINDOW.

Описані методи - це далеко не повний перелік варіантів блокування системних елементів в Android. Розробники постійно знаходять або винаходять щось нове, діляться досвідом, і створюють програми-кіоски, обійти обмеження в яких не здатний жоден, навіть самий хитрий користувач.

Поділіться з нами своїми секретами створення мобільних кіосків під Android: чи використовуєте ви способи, описані в статті, які переваги і недоліки знаходите в них, і які ще хакі вам відомі.