我需要/想要添加设备设置屏幕关闭超时监听器以使用用户在设置设备首选项中选择的最新时间来更新我的交换机。
我试过的代码:
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)
任何人都可以帮我解决这个问题吗?
答案 0 :(得分: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);