Начиная с 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
устарел, поэтому вызовы update и delete для этого класса игнорируются.
Поля, влияющие на API
Эти поля изменились в Android 10:
-
ContactsContract.ContactOptionsColumns#TIMES_CONTACTED
-
ContactsContract.ContractOptionsColumns.LAST_TIME_CONTACTED
-
ContactsContract.DataUsageStatColumns#TIMES_USED
-
ContactsContract.DataUsageStatColumns#LAST_TIME_USED
-
ContactsContract#CONTENT_STREQUENT_FILTER_URI
-
ContactsContract.Contacts#CONTENT_STREQUENT_URI
-
ContactsContract.Contacts#CONTENT_FREQUENT_URI
-
ContactsContract.Contacts#ENTERPRISE_CONTENT_FILTER_URI
-
ContactsContract.Contacts#CONTENT_FILTER_URI
Затронутые поля в 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 | | Без операции. |
ContactsContract.Contacts | Строгий ( помеченный звездочкой + частый)CONTENT_STREQUENT_FILTER_URI CONTENT_STREQUENT_URI CONTENT_FREQUENT_URI | Возвращает только помеченные контакты. Частые контакты не вернулись. |
ContactsContract.CommonDataKinds.Email ContactsContract.CommonDataKinds.Phone ContactsContract.CommonDataKinds.Callable | Фильтр (также называемый автозаполнением) API | Результаты не отсортированы по сходству. Они отсортированы по звездочке и названию . |
Альтернативы
Альтернатив устаревшим полям API нет. Обходные пути, предназначенные для обхода этих ограничений, будь то в виде новых API или новых полей, не допускаются.
Реализация
Вам не нужно ничего делать, чтобы реализовать эти изменения. Они являются частью инициативы по повышению конфиденциальности пользователей на платформе ОС Android. Однако, если ваши приложения используют устаревшие функции, вы можете обновить свои приложения, чтобы компенсировать любые изменения. Кроме того, если вы используете разветвленную версию поставщика контактов, вы должны обновить поставщика контактов.
Нет настройки
Не настраивайте и не обходите изменения информации о сходстве контактов. Они встроены в структуру, и внесение любых изменений выводит вас из строя. Никогда не изменяйте настройки по умолчанию и не предоставляйте альтернативные лазейки.