![](/img/trans.png)
[英]Getting contactdetails from contact Id not working in android
[英]Getting Contact ID from Android Contacts database is not working as intended
我有以下代码。
int phoneContactID = new Random().nextInt();
Cursor contactLookupCursor = context.getContentResolver().query( Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,Uri.encode(contactNumber)), new String[] {PhoneLookup.DISPLAY_NAME, PhoneLookup._ID},null,null,null);
try
{
contactLookupCursor.moveToFirst();
while(contactLookupCursor.moveToNext())
{
phoneContactID = contactLookupCursor.getInt(contactLookupCursor.getColumnIndexOrThrow(PhoneLookup._ID));
}
}
finally
{
contactLookupCursor.close();
}
上面代码中的问题是即使我在模拟器联系人中给出现有数字,它也不会返回任何结果。 我正在测试它一小时后它工作正常,现在当我再次测试它,它没有返回任何东西。 我不确定代码是否有任何问题。 我想要做的是获得一个与多个数字相匹配的ID。 例如,有一个名为“A”的联系人姓名,A有两个号码。 基本上A的联系人ID应该是1,无论我指的是哪个号码。 我的假设是否正确?
更新:我做了一些测试。 假设一个号码在没有国家代码的情况下存储在联系人数据库中,如222-222-2222。 仅当我通过2222222222或222-222-2222时,使用以下代码的搜索才会返回联系人ID。 如果存储相同的号码,如12222222222,则仅当我搜索号码为12222222222时才会收到有效的联系人ID。
String[] projection = new String[] {ContactsContract.CommonDataKinds.Phone._ID,ContactsContract.CommonDataKinds.Phone.CONTACT_ID};
Uri contactUri = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, Uri.encode(contactNumber));
Cursor c = context.getContentResolver().query(contactUri, projection, null, null, null);
if (c.moveToFirst()) {
phoneContactID = c.getInt(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
}
我不确定我在这里做错了什么。 任何帮助,将不胜感激。
public static int getContactIDFromNumber(String contactNumber,Context context)
{
contactNumber = Uri.encode(contactNumber);
int phoneContactID = new Random().nextInt();
Cursor contactLookupCursor = context.getContentResolver().query(Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,contactNumber),new String[] {PhoneLookup.DISPLAY_NAME, PhoneLookup._ID}, null, null, null);
while(contactLookupCursor.moveToNext()){
phoneContactID = contactLookupCursor.getInt(contactLookupCursor.getColumnIndexOrThrow(PhoneLookup._ID));
}
contactLookupCursor.close();
return phoneContactID;
}
现在正在运行的代码。
好的..抱歉我想念解释你的问题我还没有完成它。但我认为以下代码可能有用了试试看,lemme知道:
Cursor phone_cursor = cr.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.NUMBER + " = ?",
new String[]{"YOUR NUMBER GOES HERE"}, null);
while (phone_cursor.moveToNext())
{
//here you can extract the inofrmation you want
phone_cursor.getString( phone_cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
}
按照以下方式执行以下步骤:
//此方法将返回一个包含整个信息的游标
private Cursor getContacts()
{
// Run query
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = new String[] {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
};
String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER;
String[] selectionArgs = null;
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
return managedQuery(uri, projection, selection, selectionArgs, sortOrder);
}
接下来,您可以遍历此Cursor以获取名称和ID,如下所示:
while (cursor.moveToNext())
{
namess[i]= cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
id[i] = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
i++;
}
vikramjb答案很棒,我尝试以更清晰的方式(通过使用https://developer.android.com/reference/android/provider/ContactsContract.PhoneLookup.html中的说明):
private Long GetContactIdFromNumber(ContentResolver contentResolver, String number)
{
Uri contactLookup = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));
Cursor contactLookupCursor = contentResolver.query(contactLookup,new String[] {ContactsContract.PhoneLookup._ID}, null, null, null);
if (contactLookupCursor.moveToNext()){
long ret = contactLookupCursor.getLong(contactLookupCursor.getColumnIndexOrThrow(ContactsContract.PhoneLookup._ID));
contactLookupCursor.close();
return ret;
}
contactLookupCursor.close();
return 0l;
}
顺便说一句,在API的版本(21段)存在PHONE_ACCOUNT_ID
列CallLog.Calls
: https://developer.android.com/reference/android/provider/CallLog.Calls.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.