Android 7.1.1 では、顧客が小売店で動作中のデバイスを調べることができるように、小売デモ モードのシステム レベル サポートが導入されました。デバイスは、デバイス所有者アプリを使用して小売デモ用にセットアップされ、デバイスの使用が特定のデモ モード アプリのみに制限されるようにします。エンド ユーザーは、小売デモ デバイスに個人アカウントを追加できてはなりません。 Android 8.1 では、このサポートが改訂され、DevicePolicyManager createAndManageUser API を介してデモ ユーザーが作成されるようになりました。これにより、デモ デバイスでのユーザー管理とデバイス ポリシー管理に関して、標準の小売モードに対する OEM のカスタマイズが大幅に向上します。
DevicePolicyManager API は Android 8.1 より前のバージョンで使用できますが、デモタイプのユーザー ( DevicePolicyManager.MAKE_USER_DEMO
) はバージョン 8.0 以前のcreateAndManageUser API で作成できません。
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 などのデバイス パーティションでビデオを探し、ループで再生します。ユーザーが画面に触れると、カスタム ランチャーはアクティビティ コンポーネントを無効にし、デフォルトのシステム ランチャーが起動します。
カスタム ランチャーでは、デモ以外のシナリオでは表示されないように、カスタム コンポーネントが既定で無効になっている必要があります。デモ シナリオでは、System Server は、新しいデモ セッションを開始するときに、指定されたconfig_demoModeLauncherComponent
を有効にします。
セットアップ ウィザードは、小売モードに入るアフォーダンスを提供するために、前述のビデオも探します。ビデオがデモの一部でない場合、SUW を変更して、リテール モードがサポートされていることを示す他の OEM 固有の兆候を探すことができます。システム 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 設定。
- セルラー ネットワーク構成オプション、特にホットスポット。
- ブルートゥース構成。
- バックアップとリセット、日付と時刻、およびモバイル ネットワーク (これらはまったく表示されません)。
ユーザーが一定時間 (既定では 90 秒) アイドル状態の場合、リテール モードではシステム ダイアログが表示され、セッションを終了するか続行するかをユーザーに促します。ユーザーが終了することを選択した場合、または 5 秒間応答がない場合、リテール モードは現在のデモ ユーザーを削除し、新しいデモ ユーザーに切り替えて、元のビデオを再びループします。電源ボタンを使用して画面をオフにした場合、数秒後に自動的にオンに戻ります。
デモ セッションを終了すると、デバイスは自身をミュートし、以下を含む一部のグローバル設定をリセットします。
- 輝度
- 自動回転
- 懐中電灯
- 言語
- アクセシビリティ
小売デモモードを終了する
リテール モードを終了するには、小売店の従業員は、デモ デバイスがデバイス管理下に登録されていないことを確認し、ブート ローダーからデバイスを出荷時設定にリセットする必要があります。