БД контактов организована в трех основных таблицах:
Contacts
- каждая запись представляет один контакт и группирует один или несколько RawContacts
RawContacts
- каждая запись представляет данные о контакте, который был синхронизирован некоторыми SyncAdapter
(например, Whatsapp, Google, Facebook, Viber), при этом группируются несколько записей данных
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;
}