欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

使用ContentObserver 来监听自定义的Settings设值变化

程序员文章站 2022-03-11 21:58:24
使用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