0

我的应用使用 ContentProviderOperation 创建新联系人。问题是,我需要对新联系人的引用,因为我需要它的一些信息才能在列表视图中显示它,并有意进入联系人应用程序。

最好的东西是 ID,但我读过它可能会在数据库操作期间发生变化,这对我没有帮助。

现在我想,Uri 可能是最好的选择,因为我以后可以检索联系人 ID 或查找键。

调用 applyBatch() 后如何直接获取 Uri?

编辑:

是一个解决方案,但不是一个很好的解决方案。

他将随机生成的令牌放入每个联系人中,然后用它进行新的查询。

我既不想在联系人中添加一些额外的数据,也不想开始第二次查询。但如果没有其他可能,我会那样做。

4

1 回答 1

0

只需调用

 private String retrieveContactId(String phoneNo) {
        try {
            Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNo));
            String[] projection = new String[] { ContactsContract.PhoneLookup._ID, ContactsContract.PhoneLookup.DISPLAY_NAME };
            String selection = null;
            String[] selectionArgs = null;
            String sortOrder = ContactsContract.PhoneLookup.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
            ContentResolver cr = getApplicationContext().getApplicationContext().getContentResolver();
            String contactId = null;
            if (cr != null) {
                Cursor resultCur = cr.query(uri, projection, selection, selectionArgs, sortOrder);
                if (resultCur != null) {
                    while (resultCur.moveToNext()) {
                        contactId = resultCur.getString(resultCur.getColumnIndex(ContactsContract.PhoneLookup._ID));
                        Log.e("Info Incoming", "Contact Id : " + contactId);
                        return contactId;
                    }
                    resultCur.close();
                }
            }
        } catch (Exception sfg) {
            Log.e("Error", "Error in loadContactRecord : " + sfg.toString());
        }
        return null;
    }

对于 uri

 Uri contactUri = Contacts.getLookupUri(
                Integer.valueOf(rawContactId), clookup);
于 2013-09-20T11:47:10.170 回答