游标加载器查询联系人详细信息无法正确检测到更改

cursor loader query contact detail can't correctly detect the changes

我参考了此 link android 开发人员培训以实施使用选择标准检索联系人详细信息

/*
     * Defines the selection clause. Search for a lookup key
     * and the Email MIME type
     */
    private static final String SELECTION =
            Data.LOOKUP_KEY + " = ?" +
            " AND " +
            Data.MIMETYPE + " = " +
            "'" + Email.CONTENT_ITEM_TYPE + "'";

@Override
    public Loader<Cursor> onCreateLoader(int loaderId, Bundle args) {
        // Choose the proper action
        switch (loaderId) {
            case DETAILS_QUERY_ID:
            // Assigns the selection parameter
            mSelectionArgs[0] = mLookupKey;
            // Starts the query
            CursorLoader mLoader =
                    new CursorLoader(
                            getActivity(),
                            Data.CONTENT_URI,
                            PROJECTION,
                            SELECTION,
                            mSelectionArgs,
                            SORT_ORDER
                    );
            ...
    }

例如,何时更改联系人姓名。然后在一种情况下,当我们的应用程序添加联系人时,光标加载器无法正确检测到更改。我检查了查找键,添加的联系人键与其他键不同(例如:Orod-1340xxxxxxxx)。

搜索讨论后,查找键可能会发生变化,建议使用带有查找键的联系人查找 uri。但是在上面的查询中不能使用查找 uri。我需要在 Data table 中查询详细信息。

我怎样才能做到这一点? 非常感谢。

尝试使用 CONTACT_ID 而不是 LOOKUP_KEY

private static final String SELECTION =
    Data.CONTACT_ID + " = ? AND " +
    Data.MIMETYPE + " = '" + Email.CONTENT_ITEM_TYPE + "'";

您可能会偶然发现不要使用联系人 ID 而是使用查找键或查找 uris 的警告,但如果您的应用程序当前已启动并且 运行,最近刚查询了这个contact-id,使用它是非常安全和可以的,为此目的使用contact-id更好,因为它作为一个独立的id更稳定。

查看更多信息here and