如何直接与联系人创建联系Uri

时间:2013-09-20 11:40:26

标签: android uri lookup contact

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

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

现在我想,Uri可能是最好的,因为我以后可以检索contactID或查找键。

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

编辑:

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

他正在为每个联系人添加一个随机生成的令牌,然后用它创建一个新的查询。

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

1 个答案:

答案 0 :(得分: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);