2

我写了下面的代码来KeyGaurd使用切换按钮切换我的 android 手机。但我面临着一种奇怪的行为。

  • 它成功禁用了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

4

1 回答 1

1

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

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

KeyguardManager myKeyGuard = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
            KeyguardLock myLock = myKeyGuard
                    .newKeyguardLock(KEYGUARD_SERVICE);
于 2013-04-04T17:02:09.567 回答