Android 7.1.1 では、顧客が小売店で実際に動作しているデバイスを確認できるように、小売デモ モードのシステム レベルのサポートが導入されました。デバイスは、デバイス所有者アプリを使用して小売デモ用にセットアップされ、デバイスの使用が特定のデモ モード アプリのみに制限されるようにします。エンド ユーザーは、小売デモ デバイスに個人アカウントを追加できてはなりません。 Android 8.1 では、DevicePolicyManager createAndManageUser API を通じてデモ ユーザーを作成できるようにこのサポートが改訂されました。これにより、デモ デバイスでのユーザー管理とデバイス ポリシー管理の点で、標準小売モードに対する OEM のカスタマイズが大幅に可能になります。
DevicePolicyManager API は Android 8.1 より前のバージョンで使用できますが、バージョン 8.0 以前のcreateAndManageUser API ではデモタイプのユーザー ( DevicePolicyManager.MAKE_USER_DEMO
) を作成できません。
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.xmlファイルで指定されているフレームワーク リソースconfig_demoModeLauncherComponent
をオーバーライドすることで、カスタム ランチャーを指定できます。
<!-- Component that is the default launcher when Retail Mode is enabled. -->
<string name="config_demoModeLauncherComponent">com.android.retaildemo/.DemoPlayer</string>
/packages/apps/RetailDemoにある小売デモ DemoPlayer アプリは、Android オープンソース プロジェクト (AOSP) のデフォルトのカスタム ランチャーです。アプリは、/data/preloads/demo/retail_demo.mp4 などのデバイス パーティションでビデオを検索し、ループで再生します。ユーザーが画面に触れると、カスタム ランチャーはそのアクティビティ コンポーネントを無効にし、これによりデフォルトのシステム ランチャーが起動します。
カスタム ランチャーは、デモ以外のシナリオで表示されないように、カスタム コンポーネントをデフォルトで無効としてマークする必要があります。デモ シナリオでは、システム サーバーは、新しいデモ セッションを開始するときに、指定されたconfig_demoModeLauncherComponent
を有効にします。
セットアップ ウィザードは、小売モードに入るアフォーダンスを提供するために、前述のビデオも検索します。ビデオがデモに含まれていない場合、小売モードがサポートされていることを示す他の OEM 固有の兆候を探すように SUW を変更できます。システム A/B パーティションがある場合、システム B パーティションには /preloads/demo にデモ ビデオが含まれている必要があります。これは、最初の起動時に /data/preloads/demo にコピーされます。
小売デモモード用にプリロードされたアプリをカスタマイズする
プリロードされたアプリは、 UserManager.isDemoUser()
API を呼び出して、アプリがデモ環境で起動されるかどうかを確認することで、小売デモ モードのエクスペリエンスをカスタマイズできます。
デモ ユーザーには、アプリやユーザーが特定の操作を実行できないようにする管理対象デバイスまたはプロファイル ポリシーと同様の、特定の制限が設定されます。これらの制限の 1 つはDISALLOW_MODIFY_ACCOUNTS
です。この制限により、 AccountManagerと設定ではアカウントの追加が許可されません。一部の Google アプリはこの制限に反応してエラー メッセージを表示しますが、他のアプリ (YouTube やフォトなど) はアカウントの入力を求められません。 OEM アプリでもDISALLOW_MODIFY_ACCOUNTS
が設定されているかどうかを確認し、それに応じてシナリオを処理することをお勧めします。
システムアップデート
デフォルトでは、小売モードが有効になっている場合、デバイス ポリシーは自動的に無線 (OTA) 更新するように設定されます。小売デバイスは、ユーザーの操作なしで (バッテリーのしきい値を考慮して) アップデートをダウンロード、再起動、インストールします。
小売デモアプリ
デバイス所有者ベースの小売デモ モードの実装では、Device Policy Controllerアプリをデバイス所有者として設定する必要があります。 AOSP には、 /packages/apps/RetailDemoに参照 RetailDemo アプリ実装が含まれています。
デバイス所有者アプリは、昇格された権限やシステム イメージへの事前インストールを必要とせず、セットアップまたはプロビジョニング プロセス中にダウンロードできます。これらは主に従来のアプリと同様に実装されますが、次のような違いがあります。
すべてのデバイス所有者アプリは、すべてのDevicePolicyManager API の承認トークンとして機能するDeviceAdminReceiverコンポーネントを拡張する必要があります。コンポーネントは、
android.permission.BIND_DEVICE_ADMIN
権限を保持し、要求された特別なポリシーをメタデータとして含め、android.app.action.PROFILE_PROVISIONING_COMPLETE
およびandroid.app.action.DEVICE_ADMIN_ENABLED
インテントをフィルタリングする必要があります。DevicePolicyManager#MAKE_USER_DEMOフラグは、特別なデモタイプのユーザーを作成するために設定され、非表示の API です。このフラグの値は定数 0x4 です。
デバイスの所有権は、デバイス管理ロール所有者またはManagedProvisioningアプリを通じてのみ割り当てる必要があります。
DevicePolicyManagerクラスの API を使用すると、デバイス所有者 (DO) とプロファイル所有者 (PO) がさまざまなデバイス ポリシーを適用できるようになります。小売デモ モードに適用できるDevicePolicyManager関数の一部を以下に示します。
ユーザーを作成および管理します。
デバイスを再起動します。
LockTask が許可するパッケージを設定します。
PackageInstallerを通じてパッケージをインストールします。
パッケージのアンインストールをブロックします。
自動システムアップデートを有効にします。デバイスは自動的に OTA アップデートをダウンロードして適用します。
キーガードを無効にします。
パスワードや指紋の設定を禁止します。
許可リストに登録された、Settings.Global 、 Settings.Secure 、およびSettings.System設定のセットを設定します。
権限ポリシーを
PERMISSION_POLICY_AUTO_GRANT
に設定すると、すべての実行時権限が自動的に付与されます。権限は、単一のアプリに対して単一の権限というように、より狭い範囲で付与することもできます。これは、ユーザーがユーザーごと、アプリごとに付与する必要がある app-ops 権限には適用されません。次のように、 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
-
Web を使用してデモビデオを更新する
/packages/apps/RetailDemoにある RetailDemo アプリには、ネットワーク接続がある場合にデモ ビデオを更新する機能があります。ビデオのダウンロード元の URL は、RetailDemo アプリで次の文字列値をオーバーライドすることで構成できます。
<!-- URL where the retail demo video can be downloaded from. -->
<string name="retail_demo_video_download_url"></string>
異なる地域で異なるビデオを使用する必要がある場合は、 res/values-*/strings.xml内のロケール固有の文字列リソースを使用して、異なるダウンロード URL を構成できます。たとえば、米国と英国で異なるビデオを使用する必要がある場合、対応するダウンロード 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>
このビデオは、デバイスが再起動されるたびに最大 1 回ダウンロードされます。デバイス上のビデオが再生されているとき、RetailDemo アプリはダウンロード URL が指定されているかどうか、およびその URL にあるビデオが再生中のビデオよりも新しいかどうかをバックグラウンドでチェックします。
その場合、RetailDemo アプリはビデオをダウンロードし、再生を開始します。ビデオがダウンロードされると、それは以降のすべてのデモ セッションでの再生に使用されます。次回再起動するまで、チェックは再度実行されません。
デモビデオのガイドライン
デモビデオは縦向きレイアウト、またはタブレットの場合はデバイスの自然な向きである必要があり、5 秒を超える任意の長さにすることができます。コンテンツは表示中に常に再生されるため、焼き付きが発生しないようにしてください。
詳細については、Android 開発者のユーザー、プロファイル、アカウントの定義、 Device Policy Manager API ドキュメント、およびサンプル デバイス オーナー アプリを参照してください。
検証
CTS では、小売デモ モードはオプションの機能であるため、カバーされていません。テストは手動で、またはデモ アプリの単体テストを使用して実行する必要があります。
デモセッション
デモセッションのセットアップ
工場出荷時にデモ モードに設定されている場合、小売デモ デバイスは小売デモ モードで起動することがあります。あるいは、小売店の従業員がセットアップ ウィザードから直接小売店モードを有効にすることもできます。
図 2.小売デモ モード
デモセッションの表示
デバイスが小売モードになると、新しいデモ ユーザーに切り替わり、 「実装」で説明されているように、オーバーレイ リソースで指定されたカスタム ランチャーを自動的に起動します。デフォルトでは、このカスタム ランチャーは、ユーザーが画面にタッチしてデモ ユーザー セッションを開始するまで、デモ ビデオを繰り返し再生します。このとき、カスタム ランチャーはシステム ランチャーを起動して終了します。 OEM はカスタム ランチャーを変更して、終了時に別のサービスまたはアクティビティを追加起動することができます。
小売モードの整合性を維持するために、キーガードは無効になっており、小売モードに悪影響を与える可能性のあるクイック設定からの次のような特定のアクションも禁止されています。
- 機内モードの切り替え。
- Wi-Fi アクセス ポイントの削除または変更 (設定)。
- 通信事業者を変更する(設定)。
- ホットスポットの構成 (設定)。
- ユーザーの切り替え。
さらに、以下を無効にすることで小売モードに影響を与える可能性がある一部のグローバル設定へのアクセスもブロックされます。
- Wi-Fi設定。
- 携帯電話ネットワーク構成オプション、特にホットスポット。
- Bluetooth の設定。
- バックアップとリセット、日付と時刻、モバイル ネットワーク (これらはまったく表示されません)。
ユーザーが一定時間 (デフォルトでは 90 秒) アイドル状態になると、リテール モードではシステム ダイアログが表示され、ユーザーにセッションを終了するか続行するかを要求します。ユーザーが終了を選択した場合、または 5 秒間応答がなかった場合、リテール モードは現在のデモ ユーザーを削除し、新しいデモ ユーザーに切り替えて、元のビデオを再度ループします。電源ボタンを使用して画面をオフにしても、数秒後に自動的に画面がオンに戻ります。
デモ セッションを終了すると、デバイスは自身をミュートし、次のような一部のグローバル設定をリセットします。
- 輝度
- 自動回転
- 懐中電灯
- 言語
- アクセシビリティ
小売デモモードを終了する
小売モードを終了するには、小売店の従業員はデモ デバイスがデバイス管理に登録されていないことを確認し、ブート ローダーからデバイスを出荷時設定にリセットする必要があります。