Settings.Global 监听 特定key 值 的 数值 注册与被注册请可出完整代码
时间: 2023-11-22 14:54:11 浏览: 34
以下是一个使用 `ContentObserver` 监听 `Settings.Global` 特定 key 值变化的示例代码:
```java
public class SettingsObserver extends ContentObserver {
private Context mContext;
private OnSettingsChangeListener mListener;
public SettingsObserver(Context context, OnSettingsChangeListener listener) {
super(null);
mContext = context;
mListener = listener;
}
@Override
public void onChange(boolean selfChange, Uri uri) {
if (mListener != null) {
mListener.onSettingsChanged();
}
}
public void register() {
mContext.getContentResolver().registerContentObserver(
Settings.Global.getUriFor(Settings.Global.SOME_SETTING_KEY),
true,
this);
}
public void unregister() {
mContext.getContentResolver().unregisterContentObserver(this);
}
public interface OnSettingsChangeListener {
void onSettingsChanged();
}
}
```
在上面的代码中,我们创建了一个 `SettingsObserver` 类,它继承了 `ContentObserver` 类。我们通过传入 `Context` 和 `OnSettingsChangeListener` 接口来初始化 `SettingsObserver`。`OnSettingsChangeListener` 接口定义了当设置变化时要执行的回调函数。
`register()` 方法用于注册监听器,它使用 `getContentResolver().registerContentObserver()` 方法来注册一个 `ContentObserver`。我们传入了 `Settings.Global.getUriFor(Settings.Global.SOME_SETTING_KEY)` 作为监听的 URI,这将使监听器只接收 `SOME_SETTING_KEY` 的变化通知。设置 `true` 表示我们要监听子节点的变化。
`unregister()` 方法用于注销监听器,这里我们使用 `getContentResolver().unregisterContentObserver()` 方法来注销 `ContentObserver`。
在 `onChange()` 方法中,我们调用了 `OnSettingsChangeListener` 的回调函数,以便通知设置已经改变。
你需要将 `SettingsObserver` 对象创建并注册到你的 `Activity` 或 `Service` 中。例如:
```java
public class MainActivity extends AppCompatActivity implements SettingsObserver.OnSettingsChangeListener {
private SettingsObserver mSettingsObserver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSettingsObserver = new SettingsObserver(this, this);
mSettingsObserver.register();
}
@Override
protected void onDestroy() {
super.onDestroy();
mSettingsObserver.unregister();
}
@Override
public void onSettingsChanged() {
// 处理设置变化
}
}
```