このデベロッパー ガイドでは、専用デバイスを 1 つのデバイスにロックする方法について説明します。 1 対 1 です。企業向けモバイル管理(EMM)の場合 デベロッパーやソリューション インテグレータは、このガイドを読み、ロックタスク モードを 説明します。
概要
Android では、ロックタスクと呼ばれる没入型のキオスクのような方法でタスクを実行できます。 モード。キオスクアプリを開発する場合や ランチャーがあります。システムがロックタスクで実行されている場合 モードが有効になっていると、通常、デバイスのユーザーは通知を表示できず、許可リストに登録されていない 戻るか、ホーム画面に戻ります(ホーム画面が許可リストに登録されていない場合)。
Device Policy Controller(DPC)によって許可リストに登録されたアプリのみ実行可能 ロックタスク モードのときにのみ表示されます。アプリが許可リストに登録されています。理由は以下のとおりです。 ロックタスク モードを終了することはできません。
ロックタスク モードの許可リストに登録されたアプリと、許可リストに登録された DPC を組み合わせる方法 解決したい問題によって異なります。次に例を示します。
- コンテンツの表示用キオスクとミニ DPC を組み合わせた単一のアプリ パッケージ (ロックタスク モードの許可リストに登録します)。
- 企業向けモバイル管理ソリューションの一部である DPC は、 ロックタスク モードにします。
対象
Android 5.0 以降では、システムはロックタスク モードで実行できます。表 1 に、 ユーザーによるアプリの許可リスト登録に対応している Android のバージョン
Android バージョン | DPC が管理 | 注 |
---|---|---|
Android 5.0(API レベル 21)以降 | 完全管理対象端末 | |
Android 8.0(API レベル 26)以降 | 関連付けられたセカンダリ ユーザー | セカンダリ ユーザーはプライマリ ユーザーに関連付けられている必要があります。詳しくは、 マルチユーザーの概要をご覧ください。 |
Android 9.0(API レベル 28)以降 | セカンダリ ユーザー |
Android 9.0 以降では、DPC はアプリのアクティビティをロックタスク モードで開始できます。 それより前のバージョンでは、アプリでの独自のアクティビティの開始がすでにサポートされている必要があります。 ロックタスク モードを選択できます。
アプリを許可リストに登録
DPC をロックタスク モードで使用するには、事前にアプリを許可リストに登録する必要があります。発信
DevicePolicyManager.setLockTaskPackages()
~
次のサンプルに示すように、ロックタスク モードのアプリを許可リストに登録します。
Kotlin
// Allowlist two apps. private val KIOSK_PACKAGE = "com.example.kiosk" private val PLAYER_PACKAGE = "com.example.player" private val APP_PACKAGES = arrayOf(KIOSK_PACKAGE, PLAYER_PACKAGE) // ... val context = context val dpm = context.getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager val adminName = getComponentName(context) dpm.setLockTaskPackages(adminName, APP_PACKAGES)
Java
// Allowlist two apps. private static final String KIOSK_PACKAGE = "com.example.kiosk"; private static final String PLAYER_PACKAGE = "com.example.player"; private static final String[] APP_PACKAGES = {KIOSK_PACKAGE, PLAYER_PACKAGE}; // ... Context context = getContext(); DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); ComponentName adminName = getComponentName(context); dpm.setLockTaskPackages(adminName, APP_PACKAGES);
以前にロックタスク モードの許可リストに登録されたアプリを見つけるには、DPC から
DevicePolicyManager.getLockTaskPackages()
。その他
アプリは
DevicePolicyManager.isLockTaskPermitted()
キーを押して確定します
ロックタスク モードをサポートしていることを確認します。
ロックタスク モードを開始
Android 9.0(API レベル 28)以降では、
ロックタスク モードを選択できます。アクティビティがすでにフォアグラウンドで実行されている場合、または
アクティビティを再起動する必要があります。発信
ActivityOptions.setLockTaskEnabled()
を作成し、これらを
オプションを選択できます。次のスニペットは、
手順:
Kotlin
// Set an option to turn on lock task mode when starting the activity. val options = ActivityOptions.makeBasic() options.setLockTaskEnabled(true) // Start our kiosk app's main activity with our lock task mode option. val packageManager = context.packageManager val launchIntent = packageManager.getLaunchIntentForPackage(KIOSK_PACKAGE) if (launchIntent != null) { context.startActivity(launchIntent, options.toBundle()) }
Java
// Set an option to turn on lock task mode when starting the activity. ActivityOptions options = ActivityOptions.makeBasic(); options.setLockTaskEnabled(true); // Start our kiosk app's main activity with our lock task mode option. PackageManager packageManager = context.getPackageManager(); Intent launchIntent = packageManager.getLaunchIntentForPackage(KIOSK_PACKAGE); if (launchIntent != null) { context.startActivity(launchIntent, options.toBundle()); }
9.0 より前のバージョンの Android では、アプリはロックタスクで独自のアクティビティを開始する
モードにするには Activity.startLockTask()
を呼び出します。これを呼び出すには
メソッドでは、アクティビティがフォアグラウンドで実行されている必要があります(Activity-Lifecycle を参照)
呼び出すことをおすすめします。
Activity
の onResume()
メソッドまたは
Fragment
を選択します。startLockTask()
を呼び出す方法は次のとおりです。
Kotlin
// In our Fragment subclass. override fun onResume() { super.onResume() // First, confirm that this package is allowlisted to run in lock task mode. if (dpm.isLockTaskPermitted(context.packageName)) { activity.startLockTask() } else { // Because the package isn't allowlisted, calling startLockTask() here // would put the activity into screen pinning mode. } }
Java
// In our Fragment subclass. @Override public void onResume() { super.onResume(); // First, confirm that this package is allowlisted to run in lock task mode. if (dpm.isLockTaskPermitted(context.getPackageName())) { getActivity().startLockTask(); } else { // Because the package isn't allowlisted, calling startLockTask() here // would put the activity into screen pinning mode. } }
デバイスがロックされているときはロックタスク モードを開始しない(ユーザーが開始しない可能性があるため)
デバイスのロックを解除できます。KeyguardManager
メソッドを呼び出して、
デバイスがロックされているかどうかを確認し、Activity
のライフサイクルを使用する
コールバック(ロック解除後に呼び出される onResume()
など)を
ロックタスク モードを開始します。
ロックタスク モードのアプリは、アプリが動作している限り、新しいアクティビティを開始できる では、新しいタスクが開始されません。ただし、許可リストに登録されたアプリを起動するタスクは除きます。宛先 タスクがアクティビティとどのように関連しているかについては、「タスクの概要」と バックスタック。
または、アプリ マニフェストで宣言します。
file に記述する必要があります。
ロックタスク モードで実行されています。システムを自動的に稼働させるため
ロックタスク モードでアクティビティを起動する場合は、
android:lockTaskMode
属性を if_whitelisted
に
例を示しています。
<activity
android:name=".MainActivity"
android:lockTaskMode="if_whitelisted">
<!-- ... -->
</activity>
アプリ マニフェスト ファイルでオプションを宣言する方法について詳しくは、
lockTaskMode
リファレンス。
ロックタスク モードの停止
DPC は、アプリからアプリ パッケージを削除することで、リモートでロックタスク モードを停止できます。
できます。発信
DevicePolicyManager.setLockTaskPackages()
、
Android 6.0(API レベル 23)以降のバージョンを使用し、
配列。許可リストを更新すると、アプリは前の状態に戻ります。
タスクを自動化できます。
以前に startLockTask()
と呼ばれていたアクティビティは、
Activity.stopLockTask()
: ロックタスク モードを停止します。この方法は
ロックタスク モードを開始したアクティビティでのみ機能します。
ライフサイクル コールバック
DPC は、(同じユーザーで実行されている)アプリが
ロックタスク モードを開始して終了します。コールバックを受信するには、以下をオーバーライドします。
DPC の DeviceAdminReceiver
サブクラス内のコールバック メソッドを定義します。
onLockTaskModeEntering()
- アプリがロックタスク モードになった後に呼び出されます。リソースのパッケージ名は、
pkg
引数から取得できます。 onLockTaskModeExiting()
- アプリがロックタスク モードを終了した後に呼び出されます。このコールバックは、 アプリに関する情報が表示されます。
別のアプリをロックタスク モードで起動した場合は、アプリの実行中の
確認できます。現在のアプリがロックタスクで実行されているかどうかを確認する
モードで使用する場合は、以下に示すように ActivityManager
のメソッドを使用します。
例:
Kotlin
// Check if this app is in lock task mode. Screen pinning doesn't count. var isLockTaskModeRunning = false val activityManager = context .getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { isLockTaskModeRunning = activityManager.lockTaskModeState == ActivityManager.LOCK_TASK_MODE_LOCKED } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // Deprecated in API level 23. isLockTaskModeRunning = activityManager.isInLockTaskMode } if (isLockTaskModeRunning) { // Show the exit button ... }
Java
// Check if this app is in lock task mode. Screen pinning doesn't count. boolean isLockTaskModeRunning = false; ActivityManager activityManager = (ActivityManager) getContext().getSystemService(Context.ACTIVITY_SERVICE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { isLockTaskModeRunning = activityManager.getLockTaskModeState() == ActivityManager.LOCK_TASK_MODE_LOCKED; } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // Deprecated in API level 23. isLockTaskModeRunning = activityManager.isInLockTaskMode(); } if (isLockTaskModeRunning) { // Show the exit button ... }
UI をカスタマイズする
アプリをロックタスク モードで実行すると、システム ユーザー インターフェース(UI)が できます。
- ステータスバーが空白で、通知とシステム情報が非表示になる。
- [ホーム] ボタンと [最近] ボタンは表示されません。
- 他のアプリは新しいアクティビティを起動できません。
- ロック画面(設定されている場合)は無効になります。
Android 9.0 以降では、ロックタスク モードを有効にすると、DPC でロックタスク モードを有効化できます。
デバイス上の特定のシステム UI 機能(カスタム アプリケーションを作成するデベロッパーに
起動します。発信
DevicePolicyManager.setLockTaskFeatures()
: この図は
これを次のスニペットのようになります。
Kotlin
// Enable the Home and Overview buttons so that our custom launcher can respond // using our custom activities. Implicitly disables all other features. dpm.setLockTaskFeatures( adminName, DevicePolicyManager.LOCK_TASK_FEATURE_HOME or DevicePolicyManager.LOCK_TASK_FEATURE_OVERVIEW)
Java
// Enable the Home and Overview buttons so that our custom launcher can respond // using our custom activities. Implicitly disables all other features. dpm.setLockTaskFeatures(adminName, DevicePolicyManager.LOCK_TASK_FEATURE_HOME | DevicePolicyManager.LOCK_TASK_FEATURE_OVERVIEW);
flags
引数に含まれていない機能はすべて無効になります。「
有効にした UI 機能が、ロックタスク モードでの起動間で維持される。デバイスが
すでにロックタスク モードになっている場合、ロックタスクの機能に
すぐに表示されます。表 2 に、カスタマイズできる UI 機能を示します。
システム UI 機能 | 説明 |
---|---|
LOCK_TASK_FEATURE_HOME
|
ホームボタンを表示します。カスタム ランチャーを有効にする - デフォルトの Android を許可リストに登録しないとホームボタンは反応しません 起動します。 |
LOCK_TASK_FEATURE_OVERVIEW
|
[Overview] ボタンを表示します(このボタンをタップすると 履歴画面)。もし [ホーム] ボタンも有効にする必要があります。 |
LOCK_TASK_FEATURE_GLOBAL_ACTIONS
|
ボタンを長押ししたときに表示されるグローバル アクション ダイアログを有効にします
電源ボタンです。Google Chat の設定で
setLockTaskFeatures()
確認しましょう。通常、以下の場合、デバイスの電源を切ることはできません。
このダイアログを無効にします。 |
LOCK_TASK_FEATURE_NOTIFICATIONS
|
すべてのアプリの通知を有効にします。通知アイコンが [ ステータスバー、ヘッドアップ通知、展開可能な通知シェード。 このボタンを有効にする場合は、ホームボタンも有効にする必要があります。タップ 新しいパネルを開く通知アクションとボタン、ロックで機能しない タスクモードを選択できます。 |
LOCK_TASK_FEATURE_SYSTEM_INFO
|
ステータスバーのシステム情報領域を有効にします。この領域には、 接続、バッテリー、音とバイブレーションのオプションがあります |
LOCK_TASK_FEATURE_KEYGUARD
|
デバイスに設定されているロック画面をすべて有効にします。通常はない 情報キオスクなど、一般ユーザーが利用するデバイスに デジタルサイネージです |
LOCK_TASK_FEATURE_NONE
|
上記のシステム UI 機能をすべて無効にします。 |
DPC は
DevicePolicyManager.getLockTaskFeatures()
ロックタスク モードが有効な場合にデバイスで使用できる機能のリスト。日時
デバイスがロックタスク モードを終了すると、ユーザー インターフェースは指定された状態に戻ります。
ファイアウォールルールがあります
ウィンドウとオーバーレイをブロックする
アプリをロックタスク モードで実行すると、他のアプリやバックグラウンド サービスは
Android がロックタスク モードでアプリの前面に表示する新しいウィンドウを作成できます。
アプリとサービスはこれらのウィンドウを作成し、トースト、ダイアログ、オーバーレイを
操作できます。DPC 側でこれを防ぐには、
DISALLOW_CREATE_WINDOWS
のユーザー制限。
次の例は、
onLockTaskModeEntering()
コールバック:
Kotlin
// Called just after entering lock task mode. override fun onLockTaskModeEntering(context: Context, intent: Intent) { val dpm = getManager(context) val admin = getWho(context) dpm.addUserRestriction(admin, UserManager.DISALLOW_CREATE_WINDOWS) }
Java
// Called just after entering lock task mode. public void onLockTaskModeEntering(Context context, Intent intent) { DevicePolicyManager dpm = getManager(context); ComponentName admin = getWho(context); dpm.addUserRestriction(admin, UserManager.DISALLOW_CREATE_WINDOWS); }
DPC では、デバイスのロックタスク モードが終了したときにユーザー制限を解除できます。
参考情報
専用デバイスについて詳しくは、次のドキュメントをご覧ください。
- 専用デバイス クックブック - 専用デバイスを制限する例 ユーザーエクスペリエンスが向上します
- 専用デバイスの概要では、 専用のデバイスです。
- 複数のユーザーを管理するでは、 できます。