3

ユーザーがロック画面を無効にして再度有効にするためのオプションを (チェック ボックスの設定を使用して) アプリに作成しようとしています。disableKeyguard() を使用してロック画面を無効にすると問題なく動作しますが、reenableKeyguard() を動作させることができません。コードは非常に単純ですが、なぜ機能しないのかわかりません。

public void onSharedPreferenceChanged(SharedPreferences taskprefs,
        String tasks_pref) {
    boolean skiplock = taskprefs.getBoolean("pref_skiplock", false);
    boolean screentimeout = taskprefs.getBoolean("pref_screentimeout",
            false);

    skiplock(skiplock);

    // Log.v("TaskActivity", "Skiplock value is " + skiplock);
    // Log.v("TaskActivity", "ScreenTimeout value is " + screentimeout);
}

private void skiplock(boolean action) {
    KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Activity.KEYGUARD_SERVICE);
    KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE);
    //
    if (action == true) {
        lock.disableKeyguard();
        Toast.makeText(getApplicationContext(), "Lockscreen Disabled",
                Toast.LENGTH_SHORT).show();
    }
    //
    else if (action==false) {
        lock.reenableKeyguard();
        Toast.makeText(getApplicationContext(), "Lockscreen Enabled",
                Toast.LENGTH_SHORT).show();
    }
}
4

1 に答える 1

4

問題は、新しい Keyguard オブジェクトが呼び出されるたびに skiplock() メソッド内で作成 (宣言) されることでした。簡単な解決策は、キーガードをグローバル オブジェクトとして宣言し、その単一のオブジェクトを参照して、メソッドの実行が終了したときにステータスがリセットされないようにすることです。

つまり、「KeguardLock lock」と「KeyguardManager keyguardManager」をグローバル コンストラクターとして使用するだけです。

于 2013-03-11T19:28:01.847 に答える