Поставщик контактов и сведения о родственных связях

Начиная с Android 10, доступ к данным, связанным с контактами, управляемым компонентом поставщика контактов (источником данных, видимым в приложении контактов устройства), отличается от доступа к данным в Android 9 и более ранних версиях.

До Android 10 приложения использовали поставщика контактов для доступа к данным и их передачи между устройством и онлайн-сервисами. В Android 10 внесены изменения, касающиеся доступности данных, чтобы обеспечить повышенную конфиденциальность пользователей на всех устройствах Android 10, использующих поставщика контактов. Во-первых, базовая база данных не содержит данных о сходстве контактов. Поэтому приложения не могут писать или читать из него. Изменения включают следующее:

  • Поставщик контактов не записывает данные, связанные со сходством контактов, такие как количество раз, когда с пользователем связывались, время последнего контакта, используемое приложение, контактное лицо или любые связанные исторические данные.
  • Класс MultiAutoCompleteTextView в API автозаполнения поставщика контактов не сортирует результаты запроса по счетчику взаимодействия.
  • Платформа Android не обеспечивает неявное ранжирование контактов. (Однако контролируемое пользователем явное ранжирование контактов (например, помеченных контактов) остается).

Чтобы реализовать эти изменения, выполните одно из следующих действий:

  • Используйте последнюю версию поставщика контактов.
  • Обновите свою версию (если вы используете раздвоенную версию).

Кроме того, обновите все приложения, использующие устаревшие функции поставщика контактов . Версии API, предназначенные для обхода устаревших функций , не допускаются.

В Android 9 и более ранних версиях данные о взаимодействии с контактами из поставщика контактов не были удалены. Вместо этого данные о взаимодействии с контактами периодически очищаются (примерно один раз в день), чтобы имитировать эквивалент в Android 10. Поставщик контактов хранит эту информацию, но только временно.

Изменения API

Ожидается, что эти изменения окажут большое влияние на API. Например, рейтинг автозаполнения также не будет работать так же хорошо. Потенциальные воздействия на поведение API включают следующее:

  • Поставщик контактов не будет хранить настройки пользователя или взаимодействие с контактом в столбцах таблицы ContactsContract.Contacts .
  • API автозаполнения не сортирует результаты по счетчику взаимодействий.
  • Столбцы TIMES_CONTACTED / TIMES_USED и LAST_TIME_CONTACTED / LAST_TIME_USED не будут обновлены.
    • Они очищаются (либо null , либо устанавливаются в 0, в зависимости от затронутых столбцов) при обновлении до Android 10.
    • Ранжирование в API-интерфейсах запросов автозаполнения возвращает результаты, отсортированные в алфавитном порядке, а не по информации о сходстве.
    • Вызовы API для частых контактов (например, с использованием строки фильтра CONTENT_FREQUENT_URI ) не возвращают результатов.

Как правило, если какой-либо из устаревших элементов API поставщика контактов использует счетчики, эти счетчики (при использовании в Android 10) содержат 0 и возвращают 0 при запросе. Запросы на обновление от затронутых API игнорируются. Например, класс ContactsContract.DataUsageFeedback устарел, поэтому вызовы обновления и удаления этого класса игнорируются.

Поля, влияющие на API

Эти поля изменились в Android 10:

Затронутые поля в Android 10 могут присутствовать в разных API, как указано в таблице ниже. Устаревшие поля API возвращают указанное поведение. Поскольку одно из этих устаревших полей может использоваться в нескольких ваших API, проверьте варианты использования.

Сорт Поля API 10 возвратов
ContactsContract.Contacts
ContactsContract.RawContacts
ContactsContract.Data
ContactsContract.Entity
ContactOptionsColumns
TIMES_CONTACTED
LAST_TIME_CONTACTED
Эти столбцы всегда содержат 0, независимо от того, как они используются. Попытки изменить их игнорируются.
Contacts markAsContacted() Никакой операции.
ContactsContract.DataUsageFeedback

update
delete

Никакой операции.
ContactsContract.Contacts Частое ( помеченное + частое)
CONTENT_STREQUENT_FILTER_URI
CONTENT_STREQUENT_URI
CONTENT_FREQUENT_URI
Возвращает только помеченные контакты. Частые контакты не вернулись.
ContactsContract.CommonDataKinds.Email
ContactsContract.CommonDataKinds.Phone
ContactsContract.CommonDataKinds.Callable
Фильтрация (также называемая автозаполнением) API

CONTENT_FILTER_URI
ENTERPRISE_CONTENT_FILTER_URI

Результаты не отсортированы по сходству. Они отсортированы по помеченным и названию .

Альтернативы

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

Выполнение

Для реализации этих изменений вам не нужно ничего делать. Они являются частью инициативы по повышению конфиденциальности пользователей на платформе ОС Android. Однако если ваши приложения используют устаревшие функции, вы можете обновить свои приложения, чтобы компенсировать любые изменения. Кроме того, если вы используете разветвленную версию поставщика контактов, вам необходимо обновить поставщика контактов.

Нет настройки

Не настраивайте и не обходите изменения информации о сходстве контактов. Они встроены в структуру, и внесение любых изменений приведет к нарушению требований. Никогда не изменяйте настройки по умолчанию и не предоставляйте альтернативные варианты.