最近在搜狗輸入法實習,研究了一下android系統的鎖屏問題,記錄一下,相互學習!
android鎖屏分系統自帶的鎖屏和第三方的鎖屏。
1、系統自帶的鎖屏的修改需要改android源碼,不同的手機廠商可以做好自己的鎖屏樣式然後燒到自己生產的手機中,
如華爲,小米...,都有自己風格的鎖屏。
2、第三方鎖屏的機制是:在手機開關屏幕時,系統會發出ACTION_SCREEN_ON和ACTION_SCREEN_OFF廣播,
通過截獲這些廣播,設置自己的鎖屏view並且屏蔽掉home鍵和back鍵等,即可實現第三方鎖屏。
關於鎖屏時類似QQ彈出消息的機制:
參考鏈接 http://www.eoeandroid.com/thread-540944-1-1.html
http://stackoverflow.com/questions/21852203/android-how-to-completely-disable-keyguard
首先彈出的activity只需重寫上面的onAttacedToWindow方法即可;
FLAG_SHOW_WHEN_LOCKED和FLAG_DISMISS_KEYGUARD是關鍵,這兩個替代了以前版本裏的KeyguardLock類的功能。
FLAG_DISMISS_KEYGUARD和FLAG_SHOW_WHEN_LOCKED的描述參見android官方文檔 http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_DISMISS_KEYGUARD
自己試驗後得到的結論爲:
FLAG_DISMISS_KEYGUARD可以解除系統不安全的鎖屏,比如滑動解鎖,安全的鎖屏仍需解鎖。系統自帶的鎖屏時沒法突破的。
對於第三方的鎖屏,比如鎖屏精靈、GO鎖屏什麼的,由於其實現機制爲得到廣播然後顯示view,所以是可以屏蔽掉的。
方法爲:
自己寫一個service用來截獲屏幕關閉和點亮的廣播,然後在onReceiver裏丟棄掉(abortBroadcast())
這個廣播(這個廣播好像是順序廣播,可以被丟棄),
另外需要設置自己的這個截獲廣播的filter的優先級爲最高,方法爲filter.setPriority(1000);
以上即爲類似QQ屏幕彈窗的實現,以及彈窗時鎖頻的處理。這只是自己的探索結果,可以參考,自己嘗試。