Android 7.1.1 では、販売店デモモードのシステムレベルのサポートが導入されており、お客様は販売店でデバイスの実際の動作を確認できます。デバイスの使用が特定のデモモード アプリのみに制限されるように、デバイスの販売店デモの設定にはデバイス所有者アプリを使用します。エンドユーザーが販売店デモデバイスに個人用アカウントを追加できないようにする必要があります。Android 8.1 ではこのサポートが更新され、DevicePolicyManager createAndManageUser API を使用してデモユーザーを作成できるようになりました。これにより、デモデバイスでのユーザー管理とデバイス ポリシー管理の点で、標準の販売店モードに対する OEM のカスタマイズが大幅に強化されます。
Android 8.1 より前のバージョンでも DevicePolicyManager API を使用できますが、バージョン 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 を無効にします。システム サーバーと 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 を呼び出して、アプリがデモ環境で起動されているかどうかを確認することで、販売店デモモード向けに機能をカスタマイズできます。
デモユーザーには、アプリとユーザーが特定の操作を実行できないようにする管理対象のデバイス ポリシーやプロファイル ポリシーに類似した、特定の制限が設定されています。その制限の一つに 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に設定して、すべての実行時の権限を自動的に付与する。権限は、1 つのアプリに対して 1 つの権限など、より絞り込んで付与することもできます。これは、ユーザーがユーザーごと、アプリごとに付与する必要がある 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
 
ウェブを使ったデモ動画の更新
/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 秒間応答がなかった場合、販売店モードは現在のデモユーザーを削除して、新しいデモユーザーに切り替え、元の動画を再びループ再生します。電源ボタンを使って画面をオフにすると、数秒後に自動的にオンに戻ります。
デモセッションが終了すると、デバイスは自動でミュートされ、次のようなグローバル設定がリセットされます。
- 明るさ
- 自動回転
- ライト
- 言語
- ユーザー補助
販売店デモモードの終了
販売店モードを終了するには、販売店の従業員は、デモデバイスがデバイス管理下に登録されていないことを確認し、デバイスをブートローダーから出荷時の設定にリセットする必要があります。