Settings.Global 的 ContentObserver 不适用于 UserHandle.USER_OWNER(0) 以外的用户 ID
ContentObserver for Settings.Global does not work with user id other than UserHandle.USER_OWNER(0)
我的片段中有一个 ContentObserver 观察 Settings.Global 中的一些数据变化:
private ContentObserver mObserver = null;
private Context mContext = null;
......
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mContext = getActivity();
......
mObserver = new MyObserver(new Handler());
Uri uri = Settings.Global.getUriFor(Settings.Global.xxx);
mContext.getContentResolver().registerContentObserver(uri, true, mObserver);
......
}
......
@Override
public void onDestroyView() {
if (mObserver != null) {
mContext.getContentResolver().unregisterContentObserver(mObserver);
mObserver = null;
}
}
class MyObserver extends ContentObserver {
MyObserver(Handler handler) {
super(handler);
}
@Override
public void onChange(boolean selfChange) {
// do something
}
}
这在用户 ID 为 0 时工作正常。但是,当创建了另一个用户时,假设用户 ID 为 10,那么从 Android 设备监视器我可以看到我的应用程序的两个进程是 运行,例如com.example.myapp 和 com.example.myapp(10)。而前台进程是com.example.myapp(10)。此时 Settings.Global 中发生数据更改时,com.example.app(10) 不会触发 onChange() 而 com.example.myapp.
会触发 onChange()
有什么想法吗?
您需要在 registerContentObserver 上添加一个参数来监听所有用户的变化。
registerContentObserver(uri, true, mObserver, UserHandle.USER_ALL);
在 onChange() 方法上,您将检查当前用户的更改。
我的片段中有一个 ContentObserver 观察 Settings.Global 中的一些数据变化:
private ContentObserver mObserver = null;
private Context mContext = null;
......
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mContext = getActivity();
......
mObserver = new MyObserver(new Handler());
Uri uri = Settings.Global.getUriFor(Settings.Global.xxx);
mContext.getContentResolver().registerContentObserver(uri, true, mObserver);
......
}
......
@Override
public void onDestroyView() {
if (mObserver != null) {
mContext.getContentResolver().unregisterContentObserver(mObserver);
mObserver = null;
}
}
class MyObserver extends ContentObserver {
MyObserver(Handler handler) {
super(handler);
}
@Override
public void onChange(boolean selfChange) {
// do something
}
}
这在用户 ID 为 0 时工作正常。但是,当创建了另一个用户时,假设用户 ID 为 10,那么从 Android 设备监视器我可以看到我的应用程序的两个进程是 运行,例如com.example.myapp 和 com.example.myapp(10)。而前台进程是com.example.myapp(10)。此时 Settings.Global 中发生数据更改时,com.example.app(10) 不会触发 onChange() 而 com.example.myapp.
会触发 onChange()有什么想法吗?
您需要在 registerContentObserver 上添加一个参数来监听所有用户的变化。
registerContentObserver(uri, true, mObserver, UserHandle.USER_ALL);
在 onChange() 方法上,您将检查当前用户的更改。