A partir de Android 10, el acceso a los datos relacionados con la afinidad de contactos, administrados por el componente Proveedor de contactos (la fuente de datos que se ve en la app de contactos de un dispositivo), es diferente que en Android 9 y versiones anteriores.
Antes de Android 10, las apps usaban el proveedor de contactos para acceder a los datos y transferirlos entre un dispositivo y servicios en línea. Android 10 incluye cambios relacionados con la accesibilidad de los datos para garantizar una mayor privacidad del usuario en todos los dispositivos con Android 10 que usan el proveedor de contactos. En primer lugar, la base de datos subyacente no contiene datos de afinidades de contacto. Por lo tanto, las apps no pueden escribir en ella ni leerla. Entre los cambios, se incluyen los siguientes:
- El proveedor de contactos no registra datos relacionados con la afinidad de los contactos, como la cantidad de veces que se contactó a un usuario, la última vez que se lo contactó, la app que se usó, la persona con la que se contactó o cualquier dato histórico relacionado.
- La clase
MultiAutoCompleteTextView
de la API de autocompletado del proveedor de contactos no ordena los resultados de la consulta por contador de interacción. - El framework de Android no proporciona una clasificación de contactos implícita. (Sin embargo, permanece la clasificación de contactos explícita controlada por el usuario, como los contactos destacados).
Para implementar estos cambios, realiza una de las siguientes acciones:
- Usa la versión más reciente del Proveedor de contactos.
- Actualiza tu versión (si usas una versión bifurcada).
Además, actualiza las apps que dependen de las funciones obsoletas del Proveedor de contactos. No se permiten las versiones de API diseñadas para ser soluciones alternativas a las funciones obsoletas.
En Android 9 y versiones anteriores, no se quitaron los datos de interacción con los contactos del proveedor de contactos. En su lugar, los datos de interacción con los contactos se borran periódicamente (aproximadamente una vez al día) para simular el equivalente en Android 10. El proveedor de contactos almacena esta información, pero solo de forma temporal.
Cambios en la API
Se espera que estos cambios tengan un gran impacto en las APIs. Por ejemplo, la clasificación de autocompletar no funcionará igual de bien. Entre los posibles impactos en el comportamiento de la API, se incluyen los siguientes:
- El Proveedor de contactos no almacenará las preferencias de un usuario para el contacto ni sus interacciones en las columnas
ContactsContract.Contacts
de la tabla. - La API de Autocomplete no ordenará los resultados por contador de interacción.
- No se actualizarán las columnas
TIMES_CONTACTED
/TIMES_USED
niLAST_TIME_CONTACTED
/LAST_TIME_USED
. - Se borran (a
null
o se establecen en 0, según las columnas afectadas) cuando se actualiza a Android 10. - La clasificación en las APIs de consulta de autocompletado muestra resultados ordenados alfabéticamente, nunca por información de afinidad.
- Las llamadas a la API para contactos frecuentes (por ejemplo, con la cadena de filtro
CONTENT_FREQUENT_URI
) no muestran resultados.
Por lo general, si alguno de los elementos de la API del proveedor de contactos obsoletos usa contadores, esos contadores (cuando se usan en Android 10) contienen 0 y muestran 0 cuando se consultan. Se ignoran las solicitudes de actualización de las APIs afectadas. Por ejemplo, la clase ContactsContract.DataUsageFeedback
dejó de estar disponible, por lo que se ignoran las llamadas de actualización y eliminación a esta clase.
Campos que afectan a las APIs
Estos campos cambiaron en 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
Los campos afectados en Android 10 pueden estar presentes en diferentes APIs, como se indica en la siguiente tabla. Los campos de la API obsoletos muestran los comportamientos que se indican. Debido a que es posible que uno de estos campos obsoletos se use en varias de tus APIs, verifica tus casos de uso.
Clase | Campos de la API | 10 devoluciones |
---|---|---|
ContactsContract.Contacts ContactsContract.RawContacts ContactsContract.Data ContactsContract.Entity
|
ContactOptionsColumns TIMES_CONTACTED LAST_TIME_CONTACTED
|
Estas columnas siempre contienen 0, independientemente de cómo se usen. Se ignoran los intentos de modificarlos. |
Contacts
|
markAsContacted() |
No se realiza ninguna operación. |
ContactsContract.DataUsageFeedback
|
|
No se realiza ninguna operación. |
ContactsContract.Contacts
|
Frecuente (destacado + frecuente)CONTENT_STREQUENT_FILTER_URI CONTENT_STREQUENT_URI CONTENT_FREQUENT_URI
|
Muestra solo contactos starred. No se muestran contactos frecuentes. |
ContactsContract.CommonDataKinds.Email ContactsContract.CommonDataKinds.Phone ContactsContract.CommonDataKinds.Callable
|
APIs de filtro (también llamadas de autocompletado)
|
Los resultados no se ordenan por afinidad. Se ordenan por starred y name. |
Alternativas
No hay alternativas para los campos de API obsoletos. No se permiten las soluciones diseñadas para evitar estas restricciones, ya sea en forma de APIs o campos nuevos.
Implementación
No necesitas hacer nada para implementar estos cambios. Forman parte de la iniciativa para mejorar la privacidad del usuario en la plataforma del SO Android. Sin embargo, si tus apps dependen de funciones obsoletas, te recomendamos que las actualices para compensar los cambios. Además, si usas una versión bifurcada del Proveedor de contactos, debes actualizarlo.
Sin personalización
No personalices ni soluciones los cambios en la información de afinidad de los contactos. Están integrados en el framework, y si realizas cambios, se anulará la cumplimiento. Nunca modifiques la configuración predeterminada ni ofrezcas alternativas de puertas traseras.