我的片段中有一个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触发。
有什么想法吗?
答案 0 :(得分:0)
您需要在registerContentObserver上添加一个参数来监听所有用户的更改。
registerContentObserver(uri,true,mObserver, UserHandle.USER_ALL );
并且在方法onChange()上,您将检查当前用户的更改。