通过显示名称返回错误ID查找联系人ID

时间:2016-02-14 16:39:06

标签: android android-contacts

我的代码返回ID = 1367(正确ID为233)。怎么了?我有工作代码通过电话号码搜索ID,但我需要将其更改为按显示名称搜索。

String selection = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME+" like'%" + mStructuredName +"%'";
                        String[] projection = new String[] { ContactsContract.PhoneLookup._ID};
                        Cursor mcursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                                projection, selection, null, null);

                        long idPhone = 0;
                        try {
                            if (mcursor != null) {
                                if (mcursor.moveToFirst()) {
                                    idPhone = Long.valueOf(mcursor.getString(0));
                                }
                            }
                        } finally {
                            if (mcursor != null) {
                                mcursor.close();
                            }
                        }
                        if (idPhone > 0) {
                            Intent intent = new Intent(Intent.ACTION_EDIT);
                            intent.setData(ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, idPhone));
                            startActivity(intent);
                        }

按电话号码搜寻(工作)

Uri lookupUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(tempPhoneNum));
                Cursor mcursor = getContentResolver().query(lookupUri, new String[]{ContactsContract.PhoneLookup.DISPLAY_NAME, ContactsContract.PhoneLookup._ID}, null, null, null);
                long idPhone = 0;
                try {
                    if (mcursor != null) {
                        if (mcursor.moveToFirst()) {
                            idPhone = Long.valueOf(mcursor.getString(mcursor.getColumnIndex(ContactsContract.PhoneLookup._ID)));
                        }
                    }
                } finally {
                    if (mcursor != null) {
                        mcursor.close();
                    }
                }

                if (idPhone > 0) {
                    Intent intent = new Intent(Intent.ACTION_EDIT);
                    intent.setData(ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, idPhone));
                    startActivity(intent);
                }

1 个答案:

答案 0 :(得分:0)

你的代码看起来太复杂了,这是我的:

Cursor contacts_cur = context.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME +" = ?",
            new String[]{name}, null);

contacts_cur.moveToNext();

 String id = cursor.getString(cursor.getColumnIndex( ContactsContract.Contacts._ID));

请注意,对于我来说,通过名称检索id似乎很危险,因为两个联系人可以具有相同的名称(但不是相同的ID)。