Идентификатор контакта с номера - PullRequest
0 голосов
/ 21 февраля 2012

Я могу узнать номер контакта из ее идентификатора. Следующий фрагмент выводит число на экран.

Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
            CONTACT_PROJECTION,ContactsContract.CommonDataKinds.Phone._ID +" = 4627",
            null, null);
    phones.moveToNext();
    String phoneNumber = phones.getString(
            phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
    Toast.makeText(getBaseContext(), phoneNumber, Toast.LENGTH_LONG).show();

Однако, если я попытаюсь найти ее идентификатор по ее номеру,

Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
            CONTACT_PROJECTION,ContactsContract.CommonDataKinds.Phone._ID +" = 4627",
            null, null);
    phones.moveToNext();
    String phoneNumber = phones.getString(
            phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            //Now I got a valid phone number


            //using that number to find the id
    Cursor ids = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
            CONTACT_PROJECTION,ContactsContract.CommonDataKinds.Phone.NUMBER +" = "+ phoneNumber,
            null, null);
    ids.moveToNext();
    String id = ids.getString(
            ids.getColumnIndex(ContactsContract.CommonDataKinds.Phone._ID));
    Toast.makeText(getBaseContext(), id, Toast.LENGTH_LONG).show();

Я получаю следующую ошибку.

android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0

Я использую следующую проекцию:

private static final String[] CONTACT_PROJECTION = new String[] {
    ContactsContract.CommonDataKinds.Phone.NUMBER,
    ContactsContract.CommonDataKinds.Phone._ID
};

Второй курсор пуст, даже если я знаю, что в контактах есть такая запись. Что я делаю не так?

1 Ответ

0 голосов
/ 22 февраля 2012

Не знаю почему, но PhoneLookup сработал для меня. Для тех, у кого такая же проблема, вот мой код.

Uri contactUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode("aNumber"));
Cursor phones = getContentResolver().query(contactUri , PEOPLE_PROJECTION, null, null, null);
//here, the cursor keeps the wanted contact

...

private static final String[] PEOPLE_PROJECTION = new String[] {
    ContactsContract.PhoneLookup._ID
};
...