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() 方法上,您将检查当前用户的更改。