先官方解释下ContentObserver:
ContentObserver——内容观察者,目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理,它类似于数据库技术中的触发器(Trigger),当ContentObserver所观察的Uri发生变化时,便会触发它。触发器分为表触发器、行触发器.相应地ContentObserver也分为“表“ContentObserver、“行”ContentObserver,当然这是与它所监听的Uri MIME Type有关的。
本例中主要监听settings 里面DoubleTap的值。
1.先写SettingsObserver里的类继承ContentObserver:
class SettingsObserver extends ContentObserver {
SettingsObserver(Handler handler) {
super(handler);
}
void observe() {
ContentResolver resolver = mContext.getContentResolver();
resolver.registerContentObserver(
Settings.System.getUriFor(Settings.System.ASUS_DOUBLE_TAP), false, this,
UserHandle.USER_ALL);
updateSettings();
}
@Override
public void onChange(boolean selfChange) {
updateSettings();
}
}
public void updateSettings() {
ContentResolver resolver = mContext.getContentResolver();
mDoubleTapGesEnable = Settings.System.getIntForUser(resolver,
Settings.System.ASUS_DOUBLE_TAP, 0, UserHandle.USER_CURRENT) == 1;
}
2.实例化SettingsObserver
mSettingsObserver = new SettingsObserver(mHandler);
3.注册SettingsObserver
mSettingsObserver.observe();