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