AOSP 預設實作方式是,鎖定畫面會顯示解鎖功能 (鎖定畫面),但只會顯示在主要螢幕上。在 Android 9 (及以下版本) 中,次要螢幕支援在單一外接螢幕上顯示單一鎖定視窗。在 Android 10 中,螢幕鎖定畫面會擴展至所有公開的次要螢幕。鎖定畫面仍保持簡單,且不支援從次要畫面解鎖。
圖 1. 次要螢幕上的螢幕鎖定畫面
只要符合基本安全性需求,裝置製造商就可以為次要螢幕實作鎖定畫面。裝置鎖定時,所有螢幕上的資訊都應安全隱藏。系統並未內建政策或控制項,無法控制裝置鎖定時應顯示或隱藏哪些內容。因此,實施限制存取權的唯一安全方法,就是將所有內容隱藏在鎖定畫面和鎖定視窗後方。唯一的例外狀況是,應用程式已明確選擇使用 R.attr.showWhenLocked
或 Activity.setShowWhenLocked()
方法,在螢幕鎖定畫面頂端顯示。否則,很可能會從公開和私人顯示畫面洩漏資訊。
雖然螢幕可處於不同的狀態 (ON
/OFF
),但鎖定狀態是所有螢幕的全球狀態。如同任何裝置實作方式,使用者應能清楚瞭解裝置是否已鎖定 (或解鎖)。舉例來說,按下電源鍵通常會鎖定行動裝置。電源鍵也應鎖定所有內部和外部螢幕。
由於鎖定視窗由 SystemUI 擁有,因此不會放置在私人顯示畫面上。私人螢幕的擁有者有責任在裝置鎖定時隱藏視窗並保護內容。預設的系統實作方式「只會」透過變更隱藏狀態,隱藏私人螢幕上的活動。
實作
在次要螢幕上鎖定的視窗會在 KeyguardDisplayManager
中實作為 Presentation 視窗。Android 10 將 KeyguardDisplayManager#mPresentations
變更為陣列,可保留所有次要螢幕的所有鎖定視窗。KeyguardDisplayManager
也設有顯示器變更事件監聽器,可回應可用顯示器的變更,並保護所有畫面。請務必隨時立即鎖定所有已連結的螢幕,這樣即使攻擊者可以存取裝置,也無法擷取使用者資料。
鎖定視窗會顯示在所有公開的次要螢幕上 (請參閱 KeyguardDisplayManager#isKeyguardShowable()
)。私人螢幕的擁有者有責任在裝置鎖定時保護內容。