当前位置: 移动技术网 > IT编程>开发语言>JavaScript > 使用ContentObserver 来监听自定义的Settings设值变化

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

2020年08月01日  | 移动技术网IT编程  | 我要评论
使用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

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网