禁用后无法重新启用KeyGuard

时间:2013-03-11 12:18:17

标签: android android-asynctask togglebutton keyguard screen-lock

我已在下面编写代码,使用切换按钮切换我的Android手机的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

我也使用android 2.2.1 motoralla milestone

1 个答案:

答案 0 :(得分:1)

这里的问题是每次执行“if”语句时都要创建一个新的Lock(KeyGuardLock)。您可以在创建锁时第一次禁用锁定,但必须首先“重新启用”您禁用的锁,否则无法创建新锁。

解决方案是将锁定在onClickListener之外。即从“if”语句中取出以下代码,并在设置onClickListener之前声明它: -

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