запрос контактов - ИНОГДА возвращает пустой курсор

Я пытаюсь запросить отображаемое имя контакта:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
    case REQ_CODE_PICK_CONTACT:
        if (resultCode == Activity.RESULT_OK) {
            Uri contactUri = data.getData();

            ContentResolver cr = getActivity().getContentResolver();
            Cursor c = cr.query(contactUri, null, null, null, null);

            if (c != null && c.moveToFirst()) {
                //get the contact name
            }
        }
        break;
    }
}

Теперь вот в чем проблема:

Для некоторых контактов курсор возвращается пустым, и я не понимаю, почему. Проверил значение contactUri, выглядит так: content: //com.android.contacts/data/3032

Uri выглядит одинаково для всех типов контактов, которые я пробовал - facebook, google, phone и т. Д.

Для некоторых контактов курсор возвращается с результатом, и это хорошо, и я могу извлечь имя. Но для других он почему-то пуст, хотя ContentUri точно такой же, он был создан из Intent.getData ().

Вот несколько фактов, которые могут иметь какое-то отношение к этой странной проблеме:

  • Все контакты с пустым курсором - это контакты facebook. Ури выглядит так, как показано выше.

  • Не все контакты facebook вызывают это: у меня есть HTC One X, который в телефонной книге я могу «связать» между контактами, если ОС обнаружит связь между ними (скажем, если обнаружит аналогичный номер телефона для учетной записи Gmail и учетной записи Facebook). , предлагает мне «связать» их). Только контакты facebook, которые НЕ были «связаны», возвращаются пустыми.

Прямо сейчас у меня нет идей. Кто-нибудь сталкивался с этим раньше?

Заранее спасибо.


person nbtk    schedule 11.12.2012    source источник
comment
У меня такая же проблема. Нашли какой-нибудь намек?   -  person ticofab    schedule 31.12.2012


Ответы (1)


У меня была такая же проблема с HTC Incredible S, что заставляет меня думать, что это может быть проблема с телефонами HTC. В любом случае, обходной путь, который я в конечном итоге использовал, - это получение номера телефона из пакета, который вы возвращаете с намерением data.

final String phoneNumber = data.getStringExtra("android.intent.extra.PHONE_NUMBER");

в этот момент вам нужно будет выполнить некоторую «обратную логику», чтобы получить другие данные контакта, используя PhoneLookup.

person ticofab    schedule 14.01.2013
comment
Спасибо, я решил не обращать внимания на этих людей. В любом случае мне нужен только номер телефона, поэтому контакты facebook не будут включены. - person nbtk; 16.01.2013
comment
с помощью этого трюка вы можете получить номер телефона и включить этих людей :) - person ticofab; 16.01.2013
comment
эй, если это сработает, я был бы признателен, если бы вы приняли ответ :) - person ticofab; 30.01.2013