No Android 10 e versões mais recentes, os dados relacionados à afinidade de contatos, gerenciados pelo componente Provedor de contatos (a fonte de dados vista no app de contatos de um dispositivo), são acessados de maneira diferente do Android 9 e versões anteriores.
Antes do Android 10, os apps usavam o Provedor de Contatos para acessar e transferir dados entre um dispositivo e serviços on-line. O Android 10 tem mudanças relacionadas à acessibilidade de dados para garantir mais privacidade do usuário em todos os dispositivos Android 10 que usam o provedor de contatos. Por exemplo, o banco de dados subjacente não contém dados de afinidades de contato. Portanto, os apps não podem gravar ou ler a partir deles. Confira algumas das mudanças:
- O provedor de contatos não registra dados relacionados à afinidade de contatos, como o número de vezes que um usuário foi contatado, a última vez que ele foi contatado, o app usado, a pessoa contatada ou qualquer dado histórico relacionado.
- A classe
MultiAutoCompleteTextView
na API de autopreenchimento do provedor de contatos não classifica os resultados da consulta por contador de interação. - O framework do Android não oferece classificação de contatos implícita. No entanto, a classificação de contatos explícita controlada pelo usuário (como contatos com estrela) permanece.
Para implementar essas mudanças, faça o seguinte:
- Use o Provedor de Contatos mais recente.
- Atualize a versão (se você estiver usando uma versão bifurcada).
Além disso, atualize todos os apps que dependem dos recursos descontinuados do Provedor de contatos. Versões de API projetadas para contornar as funções descontinuadas não são permitidas.
No Android 9 e versões anteriores, os dados de interação de contato do provedor de contatos não foram removidos. Em vez disso, os dados de interação com contatos são limpos periodicamente (aproximadamente uma vez por dia) para simular o equivalente no Android 10. O Provedor de Contatos armazena essas informações, mas apenas temporariamente.
Mudanças na API
Espera-se que essas mudanças tenham um grande impacto nas APIs. Por exemplo, a classificação de preenchimento automático não vai funcionar tão bem. Os possíveis impactos no comportamento da API incluem o seguinte:
- O Provedor de contatos não armazena as preferências de um usuário ou as interações
com o contato nas colunas da tabela
ContactsContract.Contacts
. - A API Autocomplete não classifica os resultados por contador de interação.
- As colunas
TIMES_CONTACTED
/TIMES_USED
eLAST_TIME_CONTACTED
/LAST_TIME_USED
não serão atualizadas. - Elas são limpas (para
null
ou definidas como 0, dependendo das colunas afetadas) após o upgrade para o Android 10. - A classificação nas APIs de consulta de preenchimento automático retorna resultados classificados em ordem alfabética, nunca por informações de afinidade.
- As chamadas de API para contatos frequentes (por exemplo, usando a string de filtro
CONTENT_FREQUENT_URI
) não retornam resultados.
Em geral, se qualquer um dos elementos descontinuados da API Contacts Provider usar contadores,
esses contadores (quando usados no Android 10) vão conter 0 e
retornar 0 quando consultados. As solicitações de atualização das APIs afetadas são ignoradas. Por
exemplo, a classe ContactsContract.DataUsageFeedback
foi
descontinuada. Portanto, as chamadas de atualização e exclusão para essa classe são ignoradas.
Campos que afetam as APIs
Estes campos foram alterados no 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
Os campos afetados no Android 10 podem estar presentes em APIs diferentes, conforme indicado na tabela abaixo. Os campos da API descontinuados retornam comportamentos conforme listados. Como um desses campos descontinuados pode ser usado em várias APIs, verifique seus casos de uso.
Classe | Campos da API | 10 devoluções |
---|---|---|
ContactsContract.Contacts ContactsContract.RawContacts ContactsContract.Data ContactsContract.Entity
|
ContactOptionsColumns TIMES_CONTACTED LAST_TIME_CONTACTED
|
Essas colunas sempre contêm 0, independentemente de como são usadas. As tentativas de modificá-las são ignoradas. |
Contacts
|
markAsContacted() |
Nenhuma operação. |
ContactsContract.DataUsageFeedback
|
|
Nenhuma operação. |
ContactsContract.Contacts
|
Strequent (estrelado + frequente)CONTENT_STREQUENT_FILTER_URI CONTENT_STREQUENT_URI CONTENT_FREQUENT_URI
|
Retorna apenas os contatos marcados com estrela. Nenhum contato frequente foi retornado. |
ContactsContract.CommonDataKinds.Email ContactsContract.CommonDataKinds.Phone ContactsContract.CommonDataKinds.Callable
|
APIs de filtro (também chamadas de preenchimento automático)
|
Resultados não classificados por afinidade. Eles são classificados por com estrela e nome. |
Alternativas
Não há alternativas para os campos de API descontinuados. Soluções alternativas projetadas para contornar essas restrições, seja na forma de novas APIs ou novos campos, não são permitidas.
Implementação
Você não precisa fazer nada para implementar essas mudanças. Eles fazem parte da iniciativa para aumentar a privacidade do usuário na plataforma do SO Android. No entanto, se seus apps dependem de recursos descontinuados, você pode atualizá-los para compensar as mudanças. Além disso, se você usa uma versão ramificada do Provedor de contatos, é necessário atualizá-lo.
Sem personalização
Não personalize nem contorne as mudanças nas informações de afinidade dos contatos. Eles são integrados ao framework, e qualquer mudança que você fizer vai afetar a conformidade. Nunca altere as configurações padrão ou forneça alternativas de backdoor.