2

我寫下面的代碼來切換我的android手機的KeyGaurd使用切換按鈕。但我面臨着一種奇怪的行爲。無法重新啓用KeyGaurd一旦禁用它

  • 它成功禁用了keygaurd,但是。不能重新啓用。

    btnToggleLock.setOnClickListener(new OnClickListener() { 
        @Override 
        public void onClick(View v) { 
    
         if (btnToggleLock.isChecked()) { 
    
          toast.cancel(); 
          toast.setText("Unlocked"); 
          toast.show(); 
    
          Log.i("Unlocked", "If"); 
    
          KeyguardManager myKeyGuard = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); 
    
          KeyguardLock myLock = myKeyGuard 
            .newKeyguardLock(KEYGUARD_SERVICE); 
          myLock.disableKeyguard(); 
    
    
         } else { 
    
          toast.cancel(); 
          toast.setText("Locked"); 
          toast.show(); 
    
          KeyguardManager myKeyGuard = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); 
          KeyguardLock myLock = myKeyGuard 
            .newKeyguardLock(KEYGUARD_SERVICE); 
          myLock.reenableKeyguard(); 
    
          Log.i("Locked", "else"); 
    
         } 
    
        } 
    }); 
    
  • 它成功禁用了keygaurd,但是。不能重新啓用。

  • 我測試了它的控制是遍歷既if和以及else

也我米使用機器人2.2.1 motoralla milestone

回答

1

這裏的問題是每次執行「if」語句時都要創建一個新的鎖(KeyGuardLock)。您可以在創建時第一次禁用鎖,但必須「重新啓用」首先禁用的鎖,否則無法創建新的鎖。

解決方案是將鎖定在onClickListener之外。即從「if」語句中取出以下代碼並在設置onClickListener之前聲明它: -

KeyguardManager myKeyGuard = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); 
      KeyguardLock myLock = myKeyGuard 
        .newKeyguardLock(KEYGUARD_SERVICE);