从Android联系人数据库获取联系人ID无法正常工作

vik*_*mjb 4 android android-emulator android-contacts

我有以下代码.

        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();
    }       
Run Code Online (Sandbox Code Playgroud)

上面代码中的问题是即使我在模拟器联系人中给出现有数字,它也不会返回任何结果.我正在测试它一小时后它工作正常,现在当我再次测试它,它没有返回任何东西.我不确定代码是否有任何问题.我想要做的是获得一个与多个数字相匹配的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));
    }
Run Code Online (Sandbox Code Playgroud)

我不确定我在这里做错了什么.任何帮助,将不胜感激.

vik*_*mjb 20

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;
}
Run Code Online (Sandbox Code Playgroud)

现在正在运行的代码.

  • 为什么你使用"new Random().nextInt();"?在这种情况下,您应该写-1或将其更改为可为空的整数类型. (7认同)