0

我需要/想要添加设备设置屏幕关闭超时侦听器,以使用用户在设置设备首选项时选择的最新时间更新我的开关。

我试过的代码:

  OnSharedPreferenceChangeListener listener = new OnSharedPreferenceChangeListener() {

        @Override
        public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
            Log.v(TAG, "Pref changes");
        }
    };
    SharedPreferences pref = getApplicationContext().getSharedPreferences(Settings.System.SCREEN_OFF_TIMEOUT, 0);
    pref.registerOnSharedPreferenceChangeListener(listener);

我试过了,但似乎监听器只适用于特定的上下文(在我的例子中是 appContext)

谁能帮我解决这个问题?

4

1 回答 1

3

我知道这是一个老问题,但由于我最近发现了如何做到这一点,我想我会发布我的答案,以防其他人遇到这个问题。

在以下示例中,“上下文”是您的活动或服务...

int displayTimeout;

ContentObserver settingsContentObserver = new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
    super.onChange(selfChange);
    try {
        int checkDisplayTimeout = Settings.System.getInt(context.getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT);
        if (checkDisplayTimeout != displayTimeout) {
            // the DisplayTimeout has changed
            displayTimeout = checkDisplayTimeout;
        }
    } catch (SettingNotFoundException e) {
        // The SCREEN_OFF_TIMEOUT setting didn't change 'cause it doesn't exist
    }
}};

要让它开始收听,请使用

context.getContentResolver().registerContentObserver(android.provider.Settings.System.CONTENT_URI, true, settingsContentObserver);

通过使用android.provider.Settings.System.CONTENT_URI,此 ContentObserver 应该响应许多(但不是全部)设置更改。

确保在听完后将其关闭。

context.getContentResolver().unregisterContentObserver(settingsContentObserver);
于 2013-11-21T23:09:56.407 回答