[Android]自定義鎖屏並遮蔽按鍵
阿新 • • 發佈:2019-02-11
[Android]自定義鎖屏介面
@Author GQ 2016年10月23日
最新專案有一個需要鎖屏顯示的需求,類似qq鎖屏彈框訊息,於是上網搜尋相關資源,最後總結了一下下面兩種方式.
測試機使用的是5.0的系統.
效果圖
方式一:
方式二:
1. AndroidStudio使用
詳情參照demo
2. 使用
- 方式一:
//當訊息到達或者其他情況,啟動鎖屏服務,當點選home鍵喚醒螢幕時,會優先啟動一個Activity顯示鎖屏
//可顯示在鎖屏的上層介面
final Window win = getWindow();
win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
//可以使back鍵,音量加減鍵失效
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
return disableKeycode(keyCode, event);
}
private boolean disableKeycode(int keyCode, KeyEvent event) {
int key = event.getKeyCode();
switch (key) {
case KeyEvent.KEYCODE_BACK:
case KeyEvent.KEYCODE_VOLUME_DOWN:
case KeyEvent.KEYCODE_VOLUME_UP:
return true;
}
return super.onKeyDown(keyCode, event);
}
- 方式二
//基本原理也是啟動服務,當點選home鍵喚醒螢幕時,會建立一個View顯示鎖屏
//禁用系統鎖屏
mKeyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
mKeyguardLock = mKeyguardManager.newKeyguardLock("my_lockscreen" );
mKeyguardLock.disableKeyguard();
- 區別
方式一: 啟動Activity作為鎖屏,可以製作顯示在系統鎖屏上層的鎖屏,缺點是無法遮蔽home按鍵;
方式二: 同理以View作為鎖屏,只能禁用系統鎖屏使其在最上層,或者先解鎖系統,再顯示自定義View鎖屏,優點是可以遮蔽home按鍵,執行需要的自定義操作;