AOSP 的預設鎖定螢幕實現以及解鎖功能(鍵盤保護)僅出現在主顯示幕上。在 Android 9(及更低版本)中,輔助螢幕支援單一外部顯示器上的單一鎖定視窗。在 Android 10 中,鎖定畫面已擴展到所有公共輔助顯示器。鎖定螢幕仍然簡單,不支援從輔助螢幕解鎖。
圖 1.輔助顯示幕上的鎖定螢幕
只要滿足基本的安全要求,設備製造商就可以為輔助顯示器實施鎖定螢幕。當裝置鎖定時,資訊應安全地隱藏在所有顯示器上。對於設備鎖定時應顯示或隱藏哪些內容,沒有內建策略或控制。因此,實現受限存取的唯一安全方法是將所有內容隱藏在鎖定螢幕和鎖定視窗後面。唯一的例外是使用R.attr.showWhenLocked
或Activity.setShowWhenLocked()
方法明確選擇顯示在鎖定螢幕頂部的應用程式。否則,很可能會從公共和私人展示中洩露資訊。
雖然顯示器可以置於不同的狀態( ON
/ OFF
),但鎖定狀態對於所有顯示器都是全域的。與任何設備實現一樣,設備何時鎖定(或解鎖)對於用戶來說應該是顯而易見的。例如,按下電源按鈕通常會鎖定行動裝置。電源按鈕也應該鎖定所有內部和外部螢幕。
由於鎖定視窗歸 SystemUI 所有,因此不會將其放置在私人顯示器上。私人顯示器的所有者負責在裝置鎖定時隱藏視窗並保護內容。預設系統實作僅透過更改可見性來隱藏私人顯示器上的活動。
執行
輔助顯示器上的鎖定視窗在KeyguardDisplayManager
中實作為示範視窗。 Android 10 將KeyguardDisplayManager#mPresentations
變更為一個數組,用於儲存所有輔助螢幕的所有鎖定視窗。 KeyguardDisplayManager
還具有顯示更改偵聽器,用於回應可用顯示的變更並保護所有螢幕。在任何給定時間立即鎖定所有連接的顯示器非常重要,這樣攻擊者即使實體存取裝置也無法提取使用者資料。
鎖定視窗顯示在所有公共輔助顯示器上(請參閱KeyguardDisplayManager#isKeyguardShowable()
)。私人顯示器的擁有者有責任在裝置鎖定時保護內容的安全。