AOSP 的鎖定屏幕的默認實現以及解鎖它的可供性(鍵盤保護)僅出現在主顯示屏上。在 Android 9(及更低版本)中,輔助屏幕支持單個外部顯示器上的單個鎖定窗口。在 Android 10 中,鎖定屏幕擴展到所有公共輔助顯示器。鎖定屏幕保持簡單,不支持從輔助屏幕解鎖。
圖 1.副顯示屏上的鎖定屏幕
只要滿足基本的安全要求,設備製造商就可以將其鎖定屏幕用於輔助顯示器。當設備被鎖定時,信息應該被安全地隱藏在所有顯示器上。沒有內置策略或控制設備鎖定時應顯示或隱藏哪些內容。因此,實施受限訪問的唯一安全方法是將所有內容隱藏在鎖定屏幕和鎖定窗口後面。唯一的例外是使用R.attr.showWhenLocked
或Activity.setShowWhenLocked()
方法明確選擇顯示在鎖定屏幕頂部的應用程序。否則,很可能會從公共和私人展示中洩露信息。
雖然可以將顯示器置於不同的狀態( ON
/ OFF
),但鎖定狀態對所有顯示器都是全局的。與任何設備實現一樣,當設備被鎖定(或解鎖)時,用戶應該很清楚。例如,按下電源按鈕通常會鎖定移動設備。電源按鈕還應鎖定所有內部和外部屏幕。
因為鎖定窗口歸 SystemUI 所有,所以它不會放在私人顯示器上。私人顯示器的所有者負責在設備鎖定時隱藏窗口並保護內容。默認系統實現僅通過更改可見性來隱藏私人顯示器上的活動。
執行
輔助顯示器上的鎖定窗口在KeyguardDisplayManager
中實現為Presentation窗口。 Android 10 將KeyguardDisplayManager#mPresentations
更改為包含所有輔助屏幕的所有鎖定窗口的數組。 KeyguardDisplayManager
還具有一個顯示更改偵聽器,以響應可用顯示的更改並保護所有屏幕。在任何給定時間立即鎖定所有連接的顯示器非常重要,這樣攻擊者即使對設備進行物理訪問也無法提取用戶數據。
鎖定窗口顯示在所有公共輔助顯示器上(請參閱KeyguardDisplayManager#isKeyguardShowable()
)。私人顯示器的所有者負責在設備鎖定時保護內容。