В Android 7.1.1 появилась поддержка демонстрационного режима розничной торговли на системном уровне, чтобы покупатели могли проверить устройства в действии в розничных магазинах. Устройства настраиваются для розничной демонстрации с помощью приложения владельца устройства, чтобы гарантировать, что использование устройства ограничено только определенными приложениями в демонстрационном режиме. Конечные пользователи не должны иметь возможность добавлять личную учетную запись на розничном демонстрационном устройстве. В Android 8.1 эта поддержка изменена для создания демонстрационных пользователей с помощью API DevicePolicyManager createAndManageUser . Это обеспечивает гораздо большую настройку OEM-производителя для стандартного розничного режима с точки зрения управления пользователями и управления политиками устройств на демонстрационном устройстве.
Хотя API-интерфейсы DevicePolicyManager можно использовать в версиях до Android 8.1, пользователей демонстрационного типа ( DevicePolicyManager.MAKE_USER_DEMO
) нельзя создавать с помощью API createAndManageUser в версиях 8.0 и более ранних версиях.
Реализация в Android 8.1 и более поздних версиях
В этом разделе освещаются улучшения платформы и описывается демонстрационное приложение для розничной торговли в Android 8.1 и более поздних версиях.
Изменения платформы
Установите DEVICE_DEMO_MODE
Устройства, реализующие розничный демонстрационный режим на основе владельца устройства, должны установить Settings.Global.DEVICE_DEMO_MODE
значение 1 перед подготовкой, чтобы указать, что устройство подготавливается для розничного демонстрационного режима. SystemServer использует этот флаг для управления аспектами розничного режима, такими как профиль мощности и SystemUI.
Включить службу RetailDemoModeService.
В устройствах, реализующих демонстрационный режим розничной торговли, мастер настройки устанавливает для глобального параметра Global.DEVICE_DEMO_MODE
значение true
, чтобы указать, что устройство перешло в режим розничной торговли. Увидев этот параметр, RetailDemoModeService создает демонстрационного пользователя и переключается на него при запуске пользователя 0, включает настраиваемое средство запуска, указанное в ресурсе наложения, и отключает SUW. System Server и SystemUI также используют этот флаг для управления аспектами розничного режима.
Установите собственный лаунчер или видеоплеер
Производители устройств могут указать собственный модуль запуска, переопределив ресурс платформы config_demoModeLauncherComponent
, указанный в файле config.xml , следующим образом.
<!-- Component that is the default launcher when Retail Mode is enabled. -->
<string name="config_demoModeLauncherComponent">com.android.retaildemo/.DemoPlayer</string>
Розничное демонстрационное приложение DemoPlayer, расположенное по адресу /packages/apps/RetailDemo, является настраиваемым средством запуска по умолчанию в проекте Android с открытым исходным кодом (AOSP). Приложение ищет видео в разделе устройства, например /data/preloads/demo/retail_demo.mp4, и воспроизводит его в цикле. Когда пользователь касается экрана, настраиваемая программа запуска отключает свой компонент активности, в результате чего запускается системная программа запуска по умолчанию.
Пользовательский компонент пользовательского средства запуска должен быть помечен как отключенный по умолчанию, чтобы он не отображался в сценариях, отличных от демонстрационных. В демонстрационном сценарии системный сервер включает указанный config_demoModeLauncherComponent
при запуске нового демонстрационного сеанса.
Мастер настройки также ищет ранее упомянутое видео, чтобы предоставить возможность войти в режим розничной торговли. SUW можно изменить, чтобы найти какой-либо другой специфичный для OEM-производителя признак того, что поддерживается розничный режим, если видео не является частью демонстрации. Если есть разделы системы A/B, раздел системы B должен содержать демонстрационное видео в /preloads/demo. Это копируется в /data/preloads/demo при первой загрузке.
Настройте предустановленные приложения для демонстрационного режима розничной торговли.
Предварительно загруженные приложения можно настроить для работы в демонстрационном режиме розничной торговли, вызвав API UserManager.isDemoUser()
, чтобы узнать, запущено ли приложение в демонстрационной среде.
Для демонстрационного пользователя устанавливаются определенные ограничения, аналогичные политикам управляемых устройств или профилей, которые не позволяют приложениям и пользователям выполнять определенные операции. Одним из этих ограничений является DISALLOW_MODIFY_ACCOUNTS
. Благодаря этому ограничению AccountManager и настройки не позволяют добавлять учетные записи. Некоторые приложения Google реагируют на это ограничение и отображают сообщение об ошибке, а другие не запрашивают учетную запись (например, YouTube и Фото). Мы рекомендуем, чтобы OEM-приложения также проверяли, установлен ли DISALLOW_MODIFY_ACCOUNTS
, и обрабатывали сценарий соответствующим образом.
Обновления системы
По умолчанию, когда включен розничный режим, политика устройства настроена на автоматическое обновление по беспроводной сети (OTA). Розничные устройства загрузят, перезагрузят и установят обновление (с учетом пороговых значений заряда батареи) без вмешательства пользователя.
Демо-приложение для розничной торговли
Реализация демонстрационного режима розничной торговли на основе владельца устройства требует, чтобы приложение Device Policy Controller было установлено в качестве владельца устройства. AOSP содержит эталонную реализацию приложения RetailDemo в /packages/apps/RetailDemo .
Приложениям владельца устройства не требуются повышенные привилегии или предварительная установка в образе системы, и их можно загрузить в процессе установки или подготовки. В основном они реализованы как традиционные приложения со следующими отличиями:
Все приложения владельца устройства должны расширять компонент DeviceAdminReceiver , который служит токеном авторизации для всех API-интерфейсов DevicePolicyManager . Компонент должен иметь разрешение
android.permission.BIND_DEVICE_ADMIN
, включать запрошенные специальные политики в качестве метаданных и фильтровать намеренияandroid.app.action.PROFILE_PROVISIONING_COMPLETE
иandroid.app.action.DEVICE_ADMIN_ENABLED
.Флаг DevicePolicyManager#MAKE_USER_DEMO , который установлен для создания специальных пользователей демонстрационного типа, представляет собой скрытый API. Этот флаг имеет значение константы 0x4.
Право собственности на устройство должно назначаться только через владельца роли управления устройством или приложение ManagedProvisioning .
API-интерфейсы в классе DevicePolicyManager позволяют владельцу устройства (DO) и владельцу профиля (PO) применять различные политики устройства. Ниже перечислены некоторые функции DevicePolicyManager , применимые для демонстрационного режима розничной торговли.
Создание пользователей и управление ими.
Перезагрузите устройство.
Установите разрешенные пакеты LockTask.
Устанавливайте пакеты через PackageInstaller .
Блокировать удаление пакетов.
Включите автоматическое обновление системы. Устройства автоматически загрузят и примут OTA-обновления.
Отключите защиту клавиатуры.
Запретите установку паролей или отпечатков пальцев.
Установите набор разрешенных параметров Settings.Global , Settings.Secure и Settings.System .
Установите политику разрешений
PERMISSION_POLICY_AUTO_GRANT
, которая автоматически предоставляет все разрешения во время выполнения. Разрешения также можно предоставлять более узко: одно разрешение для одного приложения. Это не относится к разрешениям на эксплуатацию приложений, которые пользователи по-прежнему должны предоставлять отдельно для каждого пользователя и для каждого приложения.Установите пользовательские ограничения, относящиеся к режиму розничной торговли, как определено в UserManager , следующим образом.
-
DISALLOW_MODIFY_ACCOUNTS
-
DISALLOW_USB_FILE_TRANSFER
-
DISALLOW_DEBUGGING_FEATURES
-
DISALLOW_CONFIG_WIFI
-
DISALLOW_CONFIG_BLUETOOTH
-
DISALLOW_INSTALL_UNKNOWN_SOURCES
-
DISALLOW_CONFIG_MOBILE_NETWORKS
-
Обновите демонстрационное видео через Интернет
Приложение RetailDemo в /packages/apps/RetailDemo имеет возможность обновлять демонстрационное видео при наличии подключения к сети. URL-адрес для загрузки видео можно настроить, переопределив следующее строковое значение в приложении RetailDemo.
<!-- URL where the retail demo video can be downloaded from. -->
<string name="retail_demo_video_download_url"></string>
Если в разных регионах необходимо использовать разные видео, то разные URL-адреса загрузки можно настроить с помощью строковых ресурсов, специфичных для локали, в res/values-*/strings.xml . Например, если в США и Великобритании необходимо использовать разные видео, соответствующие URL-адреса загрузки можно разместить в файлах res/values-en-rUS/strings.xml и res/values-en-rGB/strings.xml. соответственно, показано следующим образом.
В файле res/values-en-rUS/strings.xml:
<string name="retail_demo_video_download_url">download URL for US video goes here</string>
В файле res/values-en-rGB/strings.xml:
<string name="retail_demo_video_download_url">download URL for UK video goes here</string>
Это видео загружается не чаще одного раза при каждой перезагрузке устройства. Когда видео на устройстве воспроизводится, приложение RetailDemo в фоновом режиме проверяет, указан ли URL-адрес загрузки и является ли видео по URL-адресу более новым, чем воспроизводимое.
Если да, приложение RetailDemo загружается и начинает воспроизводить видео. После загрузки видео оно будет использоваться для воспроизведения во всех последующих демонстрационных сеансах. Ни одна проверка не повторяется до следующей перезагрузки.
Рекомендации по демонстрационному видео
Демонстрационные видеоролики должны быть в книжной ориентации или, если это планшет, в естественной ориентации устройства, а продолжительность может превышать пять секунд. Содержимое не должно приводить к выгоранию, поскольку при отображении оно будет воспроизводиться постоянно.
Дополнительные сведения см. в определениях пользователей, профилей и учетных записей разработчиков Android , документации по API диспетчера политик устройств и примере приложения владельца устройства .
Валидация
CTS не поддерживает демонстрационный режим розничной торговли, поскольку это дополнительная функция. Тестирование должно проводиться вручную или с помощью модульных тестов для демонстрационного приложения.
Демо-сессия
Настройка демо-сессии
Розничные демонстрационные устройства могут загружаться в розничном демонстрационном режиме, если они настроены на демонстрационный режим на заводе. Альтернативно, сотрудники розничной торговли могут включить режим розничной торговли непосредственно из мастера настройки.
Рисунок 2. Демонстрационный режим розничной торговли
Показать демонстрационную сессию
Когда устройство переходит в розничный режим, оно переключается на нового демонстрационного пользователя и автоматически запускает пользовательскую программу запуска, указанную в ресурсе оверлея, как описано в разделе «Реализация» . По умолчанию эта настраиваемая программа запуска воспроизводит демонстрационное видео на повторе, пока пользователь не коснется экрана, чтобы начать демонстрационный сеанс пользователя. В это время пользовательская программа запуска запускает системную программу запуска, а затем завершает работу. OEM-производители могут изменить пользовательскую программу запуска, чтобы дополнительно запускать другую службу или действие при выходе.
Чтобы обеспечить целостность режима розничной торговли, защита клавиатуры отключена, а также запрещены некоторые действия из быстрых настроек, которые могут отрицательно повлиять на режим розничной торговли, включая следующие.
- Переключение режима полета.
- Удаление или изменение точек доступа Wi-Fi (Настройки).
- Смена оператора (Настройки).
- Настройка точки доступа (Настройки).
- Переключение пользователей.
Кроме того, доступ также блокируется к некоторым глобальным настройкам, которые могут повлиять на режим розничной торговли, путем отключения следующих элементов:
- Настройки Wi-Fi.
- Параметры конфигурации сотовой сети, особенно точки доступа.
- Конфигурация Bluetooth.
- Резервное копирование и сброс, Дата и время и Мобильные сети (они вообще не отображаются).
Если пользователь бездействует в течение некоторого периода времени (по умолчанию 90 секунд), в розничном режиме отображается системное диалоговое окно, предлагающее пользователю либо выйти из сеанса, либо продолжить. Если пользователь решает выйти или если в течение пяти секунд нет ответа, розничный режим удаляет текущего демонстрационного пользователя, переключается на нового демонстрационного пользователя и снова воспроизводит исходное видео. Если экран выключается с помощью кнопки питания, он автоматически включается через несколько секунд.
После выхода из демонстрационного сеанса устройства отключают звук и сбрасывают некоторые глобальные настройки, в том числе следующие:
- Яркость
- Автоповорот
- Фонарик
- Язык
- Доступность
Выйти из демонстрационного режима розничной торговли
Чтобы выйти из режима розничной торговли, сотрудники розничной торговли должны убедиться, что демонстрационное устройство не зарегистрировано в системе управления устройствами, и выполнить сброс настроек устройства до заводских настроек с помощью загрузчика.