1. 程式人生 > >[Android]自定義鎖屏並遮蔽按鍵

[Android]自定義鎖屏並遮蔽按鍵

[Android]自定義鎖屏介面

@Author GQ 20161023日  

最新專案有一個需要鎖屏顯示的需求,類似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按鍵,執行需要的自定義操作;

3. Demo下載