Похоже, вы пытаетесь запросить таблицу контактов и вернуть из нее номер телефона.
К сожалению, это не так, как работает поставщик контактов.В итоге: у поставщика контактов есть три таблицы: Контакты, RawContacts и Данные.Каждая строка контакта указывает на одну или несколько строк RawContacts.Каждая строка RawContact указывает на одну или несколько строк данных.
Люди хранятся в поставщике контактов в виде необработанных контактов.Сам провайдер создает строки контактов.Одно необработанное имя контакта выбирается автоматически в качестве DISPLAY_NAME_PRIMARY строки Контакт.
Таблица данных содержит сведения о необработанном контакте.Строки являются общими.Каждый из них имеет одинаковые имена столбцов, которые вы можете увидеть в ContactsContract.Data.Чтобы выбрать конкретный тип сведений, например номер телефона, необходимо выполнить поиск строки данных с типом MIME ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE.Затем вы можете ссылаться на номер телефона в этой строке как ContactsContract.CommonDataKinds.Phone.PHONE_NUMBER;значение этой константы - «data1».То есть константы в классах CommonDataKinds являются псевдонимами имен столбцов DATA1-DATA15, определенных в ContactsContract.Data.Псевдонимы облегчают понимание семантики строки данных.
Существует простой способ достичь вашей цели: использовать конструкцию ContactsContract.Contacts.Entity.Это возвращает курсор, содержащий все строки Data и RawContacts для контакта.Если для аргументов выбора задано ContactsContract.Data.MIME_TYPE = ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE, вы будете получать только номера телефонов.
Примечания. Отображаемое имя необработанного контакта сохраняется в таблице данных, какстрока ContactsContract.CommonDataKinds.StructuredName.