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

また、私はアンドロイド 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 に答える