PowerManager.WakeLock與KeyguardManager.KeyguardLock

1.PowerManager.WakeLock

  • 獲取PowerManager實例:
    getSystemService(Context.POWER_SERVICE);
  • 獲取WakeLock實例:
    mWakeLock = powerManager.newWakeLock(int levelAndFlags, String tag);
    levelAndFlags:WakeLock的級別,對應不同的cpu,屏幕和鍵盤燈的表現(xiàn)
    tag: debug用的
    mWakeLock.acquire();
  • 釋放WakeLock:
    mWakeLock.release();
  • WakeLockLevel:
Flag Value CPU Screen Keyboard
PARTIAL_WAKE_LOCK On* Off Off
SCREEN_DIM_WAKE_LOCK On Dim Off
SCREEN_BRIGHT_WAKE_LOCK On Bright Off
FULL_WAKE_LOCK On Bright Bright

兩個特殊的flag(只作用于屏幕,且與PARTIAL_WAKE_LOCK一起使用時無效):
ACQUIRE_CAUSES_WAKEUP:普通的鎖只能在亮屏時保持不滅,而該鎖可讓屏幕在滅屏情況下立即亮屏
ON_AFTER_RELEASE:當鎖釋放時用戶activity計時器會被重置,導致照明持續(xù)一段時間后再滅屏

PARTIAL_WAKE_LOCK:       保證CPU運行,允許滅屏,允許關(guān)閉鍵盤燈;唯一能夠在滅屏下讓CPU運行的鎖;
SCREEN_DIM_WAKE_LOCK:    亮屏,但會變暗,允許關(guān)閉鍵盤燈;
SCREEN_BRIGHT_WAKE_LOCK: 亮屏,且保持全亮,允許關(guān)閉鍵盤燈;
FULL_WAKE_LOCK:          保持屏幕常亮,鍵盤燈常亮;

后面三個flag在 API 17 以后已經(jīng)棄用,替代他們的是FLAG_KEEP_SCREEN_ON

  • FLAG_KEEP_SCREEN_ON:只要窗口可見,則保持不滅;無需權(quán)限。
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

  • 權(quán)限:
    <uses-permission android:name="android.permission.WAKE_LOCK" />

  • 注意:WakeLock的設置是 Activiy 級別的,不是針對整個Application應用的。

2.KeyguardManager.KeyguardLock

  • 獲取KeyguardManager實例
    mKeyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);

  • 獲取KeyguardLock實例
    mKeyguardLock = mKeyguardManager.newKeyguardLock(String tag);

  • 在解鎖屏幕
    mKeyguardLock.disableKeyguard(); //如果已鎖,則立馬解鎖;如果未鎖,則一直保持不鎖,直到調(diào)用reenableKeyguard();

  • 在解鎖的情況下允許鎖屏:
    mKeyguardLock.reenableKeyguard();//重新啟用鍵盤鎖,與disableKeyguard()對應。

  • 權(quán)限:
    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />

  • 注意:在設置了密碼鎖的情況下,該方法不能直接解鎖。

3.總結(jié)

  • 如果想要在鎖屏黑屏下立即解鎖并亮屏:
    mWakeLock = powerManager.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP,"TAG");
    mWakeLock.acquire();//點亮屏幕
    mKeyguardLock.disableKeyguard();//解鎖屏幕

    //對應的釋放:
    mWakeLock.release();
    mKeyguardLock.reenableKeyguard();
    
  • 如果想要讓手機在滅屏下還能保持cpu工作(比如timer,handler等):
    mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"TAG");
    mWakeLock.acquire();//記得釋放

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容