Settings.Global 监听 特定key 值 的 数值 注册与被注册请可出完整代码
时间: 2023-07-16 21:16:26 浏览: 44
注册监听:
```java
ContentResolver resolver = getContentResolver();
Uri uri = Settings.Global.getUriFor("your_key");
resolver.registerContentObserver(uri, false, yourContentObserver);
```
其中,"your_key" 替换成你要监听的 key 值,yourContentObserver 替换成你自己的 ContentObserver 实例。
被注册:
```java
public class YourContentObserver extends ContentObserver {
public YourContentObserver(Handler handler) {
super(handler);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
// 处理被监听 key 值的数值变化
}
}
```
在 onChange() 方法中,处理被监听 key 值的数值变化,以实现你想要的逻辑。
相关问题
Settings.Global 监听 特定key 值 的 数值 注册与解除注册请可出完整代码
这里是使用ContentObserver来监听Settings.Global中指定key值的变化,并注册/解除注册的完整代码:
```
import android.content.Context;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Handler;
import android.provider.Settings;
public class SettingsObserver {
private Context mContext;
private ContentObserver mObserver;
private String mKey;
private OnSettingChangeListener mListener;
public interface OnSettingChangeListener {
void onSettingChange(String key, int value);
}
public SettingsObserver(Context context, String key, OnSettingChangeListener listener) {
mContext = context;
mKey = key;
mListener = listener;
mObserver = new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange, Uri uri) {
super.onChange(selfChange, uri);
if (uri != null && uri.toString().equals(Settings.Global.getUriFor(mKey).toString())) {
int value = Settings.Global.getInt(mContext.getContentResolver(), mKey, 0);
mListener.onSettingChange(mKey, value);
}
}
};
}
public void register() {
mContext.getContentResolver().registerContentObserver(Settings.Global.getUriFor(mKey), true, mObserver);
}
public void unregister() {
mContext.getContentResolver().unregisterContentObserver(mObserver);
}
}
```
使用示例:
```
SettingsObserver observer = new SettingsObserver(context, Settings.Global.WIFI_SLEEP_POLICY, new SettingsObserver.OnSettingChangeListener() {
@Override
public void onSettingChange(String key, int value) {
if (key.equals(Settings.Global.WIFI_SLEEP_POLICY)) {
// do something with the new value
}
}
});
observer.register();
```
在不需要监听时,需要调用`observer.unregister()`来解除注册。
Settings.Global 监听 特定key 值 的 数值 请可出完整代码
好的,以下是一个示例代码,用于监听 `Settings.Global` 中 `AIRPLANE_MODE_ON` 这个 key 值的数值变化:
```java
public class AirplaneModeObserver extends ContentObserver {
private Context mContext;
public AirplaneModeObserver(Context context) {
super(null);
mContext = context;
// 监听 Settings.Global 中 AIRPLANE_MODE_ON 这个 key 值的变化
mContext.getContentResolver().registerContentObserver(
Settings.Global.getUriFor(Settings.Global.AIRPLANE_MODE_ON),
false, this);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
// 获取当前 AIRPLANE_MODE_ON 的值
boolean isAirplaneModeOn = Settings.Global.getInt(
mContext.getContentResolver(),
Settings.Global.AIRPLANE_MODE_ON, 0) == 1;
// 处理数值变化的情况
if (isAirplaneModeOn) {
// Airplane mode is on
// 处理 Airplane mode 开启的情况
} else {
// Airplane mode is off
// 处理 Airplane mode 关闭的情况
}
}
}
```
在这个示例中,我们创建了一个继承自 `ContentObserver` 的类 `AirplaneModeObserver`,并重写了 `onChange()` 方法,该方法会在 `Settings.Global` 中 `AIRPLANE_MODE_ON` 这个 key 值的数值变化时被调用。
在 `AirplaneModeObserver` 的构造函数中,我们注册了一个 ContentObserver,用于监听 `Settings.Global` 中 `AIRPLANE_MODE_ON` 这个 key 值的变化。当数值发生变化时,`onChange()` 方法会被调用,我们可以在这个方法中获取当前 `AIRPLANE_MODE_ON` 的值,并根据其值进行相应的处理。
需要注意的是,在使用完 `AirplaneModeObserver` 后,应该及时调用 `mContext.getContentResolver().unregisterContentObserver(this)` 来取消注册监听器,避免内存泄漏。