鎖定畫面

AOSP 預設的螢幕鎖定實作方式 (含解鎖功能,即 Keyguard) 只會顯示在主螢幕上。在 Android 9 (以下版本) 中,第二螢幕支援單一外接螢幕上的單一鎖定視窗。在 Android 10 中,螢幕鎖定畫面會擴展至所有公開的次要螢幕。鎖定螢幕仍會保持簡潔,且不支援從次要螢幕解鎖。

圖 1. 在次要螢幕上顯示鎖定畫面

只要符合基本安全需求,裝置製造商就能為副螢幕實作螢幕鎖定功能。裝置鎖定時,所有螢幕都應安全隱藏資訊。裝置鎖定時,系統不會內建任何政策或控制選項,可供您決定要顯示或隱藏哪些內容。因此,實作受限存取的唯一安全方式,就是將所有內容隱藏在鎖定畫面和鎖定視窗後方。但如果應用程式使用 R.attr.showWhenLockedActivity.setShowWhenLocked() 方法明確選擇顯示在螢幕鎖定畫面上方,則不在此限。否則,公開和私人螢幕上的資訊很可能外洩。

螢幕可以處於不同狀態 (ON/OFF),但鎖定狀態適用於所有螢幕。與任何裝置實作方式一樣,裝置鎖定 (或解鎖) 時,使用者應能清楚辨識。舉例來說,按下電源鍵通常會鎖定行動裝置。電源按鈕也應鎖定所有內部和外部螢幕。

由於鎖定視窗屬於 SystemUI,因此不會放置在私人螢幕上。私密螢幕擁有者有責任在裝置鎖定時隱藏視窗並保護內容。預設系統實作只會透過變更顯示設定,隱藏私人螢幕上的活動。

實作

次要螢幕上的鎖定視窗會實作為 KeyguardDisplayManager 中的 Presentation 視窗。Android 10 將 KeyguardDisplayManager#mPresentations 變更為陣列,用於保存所有次要螢幕的所有鎖定視窗。KeyguardDisplayManager 也具備顯示器變更事件監聽器,可回應可用顯示器的變更,並保護所有螢幕。請務必隨時立即鎖定所有連線的螢幕,這樣一來,即使攻擊者能實際存取裝置,也無法擷取使用者資料。

所有公開的次要螢幕都會顯示鎖定視窗 (請參閱KeyguardDisplayManager#isKeyguardShowable())。私人螢幕擁有者有責任在裝置鎖定時保護內容。