A partir de Android 10, los datos de contactos afinidad relacionada, gestionados por la Contactos Proveedor de componente (la fuente de los datos observados en la aplicación Contactos del dispositivo), se accede de manera diferente que en Android 9 e inferior.
Antes de Android 10, las aplicaciones usaban el proveedor de contactos para acceder a los datos y transferirlos entre un dispositivo y los servicios en línea. Android 10 presenta cambios con respecto a la accesibilidad de los datos para garantizar una mayor privacidad del usuario en todos los dispositivos con Android 10 que utilizan el proveedor de contactos. Por un lado, la base de datos subyacente no contiene datos de afinidades de contacto. Por lo tanto, las aplicaciones no pueden escribir ni leer en él. Los cambios incluyen lo siguiente:
- 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 contactó, la aplicación utilizada, la persona contactada o cualquier dato histórico relacionado.
- El
MultiAutoCompleteTextView
clase en la API de autocompletar contactos proveedor no ordenar la consulta por el contador resultados interacción. - El marco de Android no proporciona una clasificación de contactos implícita. (Sin embargo, la clasificación, los contactos explícitas controlados por el usuario (tales como contactos con estrellas) restos).
Para implementar estos cambios, realice una de las siguientes acciones:
- Utilice el proveedor de contactos más reciente.
- Actualice su versión (si está usando una versión bifurcada).
Además, actualizar ninguna de las aplicaciones que se basan en las características Contactos Proveedor obsoletas . Versiones API diseñadas para ser soluciones a las funciones obsoletas no están permitidos.
Para Android 9 y versiones anteriores, los datos de interacción de contactos del proveedor de contactos no se han eliminado. En cambio, los datos de interacción de contacto 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 temporalmente.
Cambios de API
Se espera que estos cambios tengan un gran impacto en las API. Por ejemplo, la clasificación de autocompletar no funcionará tan bien. Los impactos potenciales en el comportamiento de la API incluyen los siguientes:
- El proveedor de Contactos no almacenará las preferencias del usuario para, o interacciones con, el contacto en las
ContactsContract.Contacts
columnas de la tabla. - La API de autocompletar no ordenará los resultados por contador de interacciones.
- El
TIMES_CONTACTED
/TIMES_USED
yLAST_TIME_CONTACTED
/LAST_TIME_USED
columnas no se actualizarán. - Estos claro (ya sea
null
o se establece en 0, dependiendo de las columnas afectadas) tras la actualización a Android 10. - La clasificación en las API de consulta de autocompletado devuelve resultados ordenados alfabéticamente, nunca por información de afinidad.
- Llamadas a la API de contactos frecuentes (por ejemplo, utilizando la cadena de filtro
CONTENT_FREQUENT_URI
) no producirá ningún resultado.
Por lo general, si alguno de los elementos obsoletos de la API del proveedor de contactos usa contadores, esos contadores (cuando se usan en Android 10) contienen 0 y devuelven 0 cuando se consultan. Las solicitudes de actualización de las API afectadas se ignoran. Por ejemplo, el ContactsContract.DataUsageFeedback
clase está desfasada, por lo que se ignoran actualizar y borrar las llamadas a esta clase.
Campos que impactan en las API
Estos campos han cambiado 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 API, como se indica en la tabla a continuación. Los campos de API obsoletos devuelven los comportamientos enumerados. Debido a que uno de estos campos obsoletos puede usarse en varias de sus API, verifique sus casos de uso.
Clase | Campos de API | 10 vueltas |
---|---|---|
ContactsContract.Contacts ContactsContract.RawContacts ContactsContract.Data ContactsContract.Entity | ContactOptionsColumns TIMES_CONTACTED LAST_TIME_CONTACTED | Estas columnas siempre contienen 0, independientemente de cómo se utilicen. Se ignoran los intentos de modificarlos. |
Contacts | markAsContacted() | No operacion. |
ContactsContract.DataUsageFeedback | | No operacion. |
ContactsContract.Contacts | Strequent (con asterisco + frecuente)CONTENT_STREQUENT_FILTER_URI CONTENT_STREQUENT_URI CONTENT_FREQUENT_URI | Las devoluciones destacados solo los contactos. No regresó ningún contacto frecuente. |
ContactsContract.CommonDataKinds.Email ContactsContract.CommonDataKinds.Phone ContactsContract.CommonDataKinds.Callable | API de filtro (también llamadas autocompletar) | Resultados no ordenados por afinidad. Estos están ordenados por estrellado y el nombre. |
Alternativas
No hay alternativas a los campos de API obsoletos. No se permiten soluciones alternativas diseñadas para eludir estas restricciones, ya sea en forma de nuevas API o nuevos campos.
Implementación
No es necesario que haga nada para implementar estos cambios. Son parte de la iniciativa para aumentar la privacidad del usuario en la plataforma del sistema operativo Android. Sin embargo, si sus aplicaciones dependen de funciones obsoletas, es posible que desee actualizar sus aplicaciones para compensar los cambios. Además, si usa una versión bifurcada del proveedor de contactos, debe actualizar su proveedor de contactos.
Sin personalización
No personalice ni evite los cambios en la información de afinidad de los contactos. Están integrados en el marco, y cualquier cambio lo sacará del cumplimiento. Nunca modifique la configuración predeterminada ni proporcione alternativas de puerta trasera.