КонтактыКонтракт выбрать записи по номеру телефона - PullRequest
0 голосов
/ 28 апреля 2018

Я могу выбрать все контакты, используя запрос ниже

    cr = mActivity.getContentResolver();
    String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + " > 0";
    String orderBy = ContactsContract.Contacts.DISPLAY_NAME + " ASC ";
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, selection, null, orderBy);

Однако у меня есть список телефонных номеров, и я хочу создать этот запрос, например

String selection = ContactsContract.Contacts.PhoneNumber_or_something_else  in (MyPhoneNumberArray)

Возможно ли это сделать?

В худшем случае я могу удалить связанный элемент, используя do, после создания курсора, но, насколько мне известно, я не могу удалить какую-либо запись из курсора.

1 Ответ

0 голосов
/ 29 апреля 2018

БД контактов организована в трех основных таблицах:

  1. Contacts - каждая запись представляет один контакт и группирует один или несколько RawContacts
  2. RawContacts - каждая запись представляет данные о контакте, который был синхронизирован некоторыми SyncAdapter (например, Whatsapp, Google, Facebook, Viber), при этом группируются несколько записей данных
  3. Data - фактические данные о контакте, адресах электронной почты, телефонах и т. Д. Каждая строка представляет собой отдельный фрагмент данных, принадлежащий одному RawContact

Все телефонные номера в БД контактов находятся в таблице Data, так что это то, что вам нужно для запроса, вы можете получить список CONTACT_ID s из этого запроса и использовать его для получения общей информации о контактах, если вы необходимо.

String[] phonesList = new String[] { "+121212345" }; // will work better if all phones in this list are in e164 format

String[] projection = { Phone.CONTACT_ID, Phone.DISPLAY_NAME, Phone.NUMBER, Phone.NORMALIZED_NUMBER };
String selection = Phone.NUMBER + " IN ('" + TextUtils.join("','", phonesList) + "') OR " + 
                   Phone.NORMALIZED_NUMBER + " IN ('" + TextUtils.join("','", phonesList) + "')";
Cursor cur = cr.query(Phone.CONTENT_URI, projection, selection, null, null);

while (cur != null && cur.moveToNext()) {
    long id = cur.getLong(0);
    String name = cur.getString(1);
    String phone = cur.getString(2);
    Log.d(TAG, "got " + id + ", " + name + ", " + phone;
}
...