我正在尝试在我的应用程序中创建一个选项(使用复选框首选项)让用户禁用并重新启用锁定屏幕。我使用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();
    }
}
.

有帮助吗?

解决方案

问题是,在Skiplock()方法中创建了新的keyguard对象,每次调用它都会在skiplock()方法中。一个简单的解决方案是将keyguard声明为全局对象,并参考该单个对象,以便在方法完成执行时其状态不会重置。

简而言之,只需使用“keguardlock锁”和“keyguardmanager keyguardmanager”作为全局构造函数。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top