Settings.Global的ContentObserver不能与UserHandle.USER_OWNER(0)以外的用户ID一起使用

时间:2017-11-06 02:25:10

标签: android android-contentprovider android-contentresolver contentobserver

我的片段中有一个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触发。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您需要在registerContentObserver上添加一个参数来监听所有用户的更改。

registerContentObserver(uri,true,mObserver, UserHandle.USER_ALL );

并且在方法onChange()上,您将检查当前用户的更改。