使用ContentObserver 来监听自定义的Settings设值变化
程序员文章站
2022-06-18 14:15:23
使用ContentObserver 来监听自定义的Settings设值变化情景:在一个app上通过开关控制系统中新添加功能的开关。方案:自定义一个key存放在Settings数据库,通过ContentObserver来监听这个key值的改变,监听到变化后进行相应的处理。代码:第一步:找到合适的位置。自定义一个key,创建内部类ContentObserver,并在其中的onChange方法做相应的处理//自定义一个key private static final String SETTIN...
使用ContentObserver 来监听自定义的Settings设值变化
情景:在一个app上通过开关控制系统中新添加功能的开关。
方案:自定义一个key存放在Settings数据库,通过ContentObserver来监听这个key值的改变,监听到变化后进行相应的处理。
代码:
第一步:找到合适的位置。自定义一个key,创建内部类ContentObserver,并在其中的onChange方法做相应的处理
//自定义一个key
private static final String SETTINGS_KEY = "key";
//创建一个内部类继承ContentObserver,
class SettingsValueContentObserver extends ContentObserver {
private Handler mHandler;
private Context mContext;
//构造函数必须有
public SettingsValueContentObserver(Handler handler, Context context) {
super(handler);
this.mHandler = handler;
this.mContext = context;
}
//当监听的uri发生改变时onChange方法会调用
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
//获取这个key的值
int value = Settings.System.getInt(mContext.getContentResolver(), SETTINGS_KEY, 0);
if (value == 1) {
//TODO 做相应的处理
}
}
}
第二步:找到合适的位置。先将这个key和值存入settings数据库,这就避免了网上那些将自定义key注册进settings.db的麻烦。再获取这个key的uri,最后注册这个uri和ContentObserver
//先将这个key和值存入settings数据库
Settings.System.putInt(getContentResolver(),SETTINGS_KEY,1);
//获取这个key的uri
Uri uri = Settings.System.getUriFor(SETTINGS_KEY);
//实例化SettingsValueContentObserver
SettingsValueContentObserver contentObserver = new SettingsValueContentObserver(handler, context);
//注册对这个uri的ContentObserver
context.getContentResolver().registerContentObserver(uri,true,contentObserver);
第三步:在app上使用Settings.System.putInt()就能改变这个key的值,而上面的onChange方法能够监听值的改变。
Settings.System.putInt(getContentResolver(),SETTINGS_KEY,1);
最后:不要忘了引入的包
import android.database.ContentObserver;
import android.net.Uri;
import android.provider.Settings;
本文地址:https://blog.csdn.net/lhg1714538808/article/details/108119530