2025 年 3 月 27 日より、AOSP のビルドとコントリビューションには aosp-main
ではなく android-latest-release
を使用することをおすすめします。詳細については、AOSP の変更をご覧ください。
ロック画面
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
AOSP のデフォルト実装では、ロックを解除するアフォーダンス付きロック画面(キーガード)がプライマリ ディスプレイにのみ表示されます。Android 9 以前では、セカンダリ画面は 1 つの外部ディスプレイ上の 1 つのロック ウィンドウをサポートしていました。Android 10 では、ロック画面がすべての公開セカンダリ ディスプレイに拡張されています。ロック画面はシンプルなままで、セカンダリ画面からのロック解除はサポートされていません。

図 1. セカンダリ ディスプレイのロック画面
基本的なセキュリティ要件を満たせば、デバイス メーカーはセカンダリ ディスプレイのロック画面を実装できます。デバイスがロックされたときに、すべてのディスプレイで情報が確実に隠される必要があります。デバイスのロック時に表示または非表示にするコンテンツに関するポリシーまたは制御は組み込まれていません。したがって、制限付きアクセスを実装する安全な方法は、ロック画面とロック ウィンドウの背後にあるすべてのコンテンツを非表示にすることだけです。唯一の例外は、R.attr.showWhenLocked
または Activity.setShowWhenLocked()
メソッドを使用してロック画面の前面に表示されるように明示的にオプトインしたアプリです。
これ以外の方法では、公開ディスプレイと非公開ディスプレイから情報が漏れる可能性が高くなります。
それぞれのディスプレイは異なる状態(ON
または OFF
)にできますが、ロック状態はすべてのディスプレイに一様に適用されます。どのようなデバイス実装でも、デバイスがロック(またはロック解除)されていることがユーザーに明確にわかる必要があります。たとえば、電源ボタンを押すと通常はモバイル デバイスがロックされますが、それと同時に、内部、外部のすべての画面がロックされる必要があります。
ロック ウィンドウは SystemUI が所有しているため、非公開ディスプレイには配置されません。非公開ディスプレイの所有者は、デバイスのロック時にウィンドウを隠してコンテンツを保護する責任があります。デフォルトのシステム実装は、表示設定を変更して非公開ディスプレイ上のアクティビティを非表示にするだけです。
実装
セカンダリ ディスプレイのロック ウィンドウは、KeyguardDisplayManager
のプレゼンテーション ウィンドウとして実装されます。Android 10 では、KeyguardDisplayManager#mPresentations
がすべてのセカンダリ画面のすべてのロック ウィンドウを保持する配列に変更されました。KeyguardDisplayManager
には、使用可能なディスプレイの変更に応答してすべての画面を保護するディスプレイ変更リスナーもあります。攻撃者がデバイスに物理的にアクセスしてもユーザーデータを抽出できないように、接続されているすべてのディスプレイをいつでもすぐにロックできることが重要です。
ロック ウィンドウは、すべての公開セカンダリ ディスプレイに表示されます(KeyguardDisplayManager#isKeyguardShowable()
を参照)。非公開ディスプレイの所有者は、デバイスがロックされたときにコンテンツを保護する責任があります。
このページのコンテンツやコードサンプルは、コンテンツ ライセンスに記載のライセンスに従います。Java および OpenJDK は Oracle および関連会社の商標または登録商標です。
最終更新日 2025-03-10 UTC。
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["必要な情報がない","missingTheInformationINeed","thumb-down"],["複雑すぎる / 手順が多すぎる","tooComplicatedTooManySteps","thumb-down"],["最新ではない","outOfDate","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["サンプル / コードに問題がある","samplesCodeIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 2025-03-10 UTC。"],[],[],null,["# Lock screen\n\nAOSP's default implementation of the Lock screen with affordances to unlock\nit (keyguard) appears only on the primary display. In Android 9 (and lower),\nsecondary screens supported a single *locking window* on a single external\ndisplay. In Android 10, the Lock screen is expanded to all public secondary\ndisplays. The Lock screen remains simple and doesn't support unlocking from secondary\nscreens.\n\n**Figure 1.** Lock screen on secondary display\n\nDevice manufacturers can implement their Lock screen for secondary displays,\nprovided the fundamental security requirement is fulfilled. When the device is\nlocked, information should be securely concealed on all displays. There's no\nbuilt-in policy or control over what content should be shown or hidden when device\nis locked. Therefore, the only secure way of implementing restricted access is to\nhide all content behind the Lock screen and locking windows. The only exceptions\nare apps that have explicitly opted in to be displayed on top of the Lock screen\nusing the\n[R.attr.showWhenLocked](https://developer.android.com/reference/android/R.attr.html#showWhenLocked) or\n[Activity.setShowWhenLocked()](https://developer.android.com/reference/android/app/Activity.html#setShowWhenLocked(boolean)) methods.\nOtherwise, there is strong potential to leak information from public and private\ndisplays.\n\nWhile displays can be placed in to different states (`ON`/`OFF`),\nthe locked state is global for all displays. As with any device implementation, it should\nbe obvious to a user when a device is locked (or unlocked). For example, pressing\na power button typically locks a mobile device. A power button should also lock all\ninternal and external screens.\n\nBecause the locking window is owned by SystemUI, it won't be placed on\nprivate displays. Owners of the private displays are responsible for hiding\nthe windows and protecting content when a device is locked. The default system\nimplementation *only* hides activities on private displays by changing\nvisibility.\n\nImplementation\n--------------\n\nThe locking window on secondary displays is implemented as a [Presentation](https://developer.android.com/reference/android/app/Presentation)\nwindow in `KeyguardDisplayManager`. Android 10 changed\n`KeyguardDisplayManager#mPresentations` to an array that holds all\nlocking windows for all secondary screens. `KeyguardDisplayManager` also\nhas a display-change listener to respond to changes to the available displays and\nsecure all screens. It's important to immediately lock all connected displays at\nany given time so that attackers can't extract user data even with physical access\nto the device.\n\nThe locking window is displayed on all public secondary displays (see\n`KeyguardDisplayManager#isKeyguardShowable()`). Owners of private\ndisplays are responsible for securing the content when a device is\nlocked."]]