我的应用与ContentProviderOperation创建新联系人。问题是,我需要一个对新联系人的引用,因为我需要它的一些信息才能在列表视图中显示它,并且意图进入联系人的联系人应用程序。
最好的事情是ID,但我读过它可能会在数据库操作期间发生变化,这对我没有帮助。
现在我想,Uri可能是最好的,因为我以后可以检索contactID或查找键。
如何在调用applyBatch()之后直接获取Uri?
编辑:
Here是一个解决方案,但并不是一个好的解决方案。
他正在为每个联系人添加一个随机生成的令牌,然后用它创建一个新的查询。
我既不想在联系人中添加一些额外的数据,也不希望开始第二次查询。但如果没有其他可能性,我会这样做。
答案 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);