A partir de Android 10, data-contatos por afinidade relacionada, geridos pelo Contactos Provedor de componente (a fonte de dados vistos no aplicativo de contatos de um dispositivo), é acessado de forma diferente do que no Android 9 e inferiores.
Antes do Android 10, os aplicativos usavam o Provedor de contatos para acessar dados e transferi-los entre um dispositivo e serviços online. O Android 10 apresenta alterações em relação à acessibilidade de dados para garantir maior privacidade do usuário em todos os dispositivos Android 10 que usam o Provedor de Contatos. Por um lado, o banco de dados subjacente não contém dados de afinidades de contato. Portanto, os aplicativos não podem escrever ou ler a partir dele. As alterações incluem o seguinte:
- 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 o contato foi feito, o aplicativo usado, a pessoa contatada ou quaisquer dados históricos relacionados.
- O
MultiAutoCompleteTextView
classe no Contactos Provider autocomplete API não classifica consulta resultados pelo contador interação. - A estrutura do Android não fornece classificação de contatos implícita. (No entanto, os contactos, explícitas controlada pelo utilizador classificação (tal como contactos com asterisco) restos).
Para implementar essas mudanças, siga um destes procedimentos:
- Use o provedor de contatos mais recente.
- Atualize sua versão (se você estiver usando uma versão bifurcada).
Além disso, atualizar quaisquer aplicativos que dependem de recursos Contactos Provedor obsoleto . Versões de API projetado para ser soluções alternativas para as funções obsoletas não são permitidos.
Para Android 9 e inferior, os dados de interação de contato do Provedor de contatos não foram removidos. Em vez disso, os dados de interação de contato 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 de API
Espera-se que essas mudanças tenham um grande impacto nas APIs. Por exemplo, a classificação de preenchimento automático não terá um bom desempenho. Os impactos potenciais no comportamento da API incluem o seguinte:
- O Provedor de contatos não irá armazenar as preferências do usuário para, ou interações com o contato nas
ContactsContract.Contacts
colunas da tabela. - A API de preenchimento automático não classificará os resultados por contador de interação.
- O
TIMES_CONTACTED
/TIMES_USED
eLAST_TIME_CONTACTED
/LAST_TIME_USED
colunas não será atualizado. - Estes clara (para o
null
ou set a 0, dependendo das colunas afetadas) após a atualização 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.
- Chamadas de API para contatos freqüentes (por exemplo, usando a seqüência de filtro
CONTENT_FREQUENT_URI
) retorna sem resultados.
Geralmente, se algum dos elementos obsoletos da API do provedor de contatos usar contadores, esses contadores (quando usados no Android 10) conterão 0 e retornarão 0 quando consultados. Solicitações de atualização de APIs afetadas são ignoradas. Por exemplo, o ContactsContract.DataUsageFeedback
classe foi preterido, então atualizar e excluir as chamadas para esta classe são ignorados.
Campos que impactam APIs
Esses campos mudaram 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 diferentes APIs, conforme indicado na tabela abaixo. Os campos de API obsoletos retornam comportamentos conforme listado. Como um desses campos obsoletos pode ser usado em várias de suas APIs, verifique seus casos de uso.
Classe | Campos API | 10 retornos |
---|---|---|
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á-los 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 | Devoluções estrelou única contatos. Nenhum contato frequente retornou. |
ContactsContract.CommonDataKinds.Email ContactsContract.CommonDataKinds.Phone ContactsContract.CommonDataKinds.Callable | APIs de filtro (também chamado de preenchimento automático) | Resultados não classificados por afinidade. Estas são classificadas segundo estrelada e nome. |
Alternativas
Não há alternativas para os campos de API obsoletos. 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 sistema operacional Android. No entanto, se seus aplicativos dependem de recursos obsoletos, você pode querer atualizá-los para compensar quaisquer alterações. Além disso, se você usar uma versão bifurcada do Provedor de contatos, deverá atualizá-lo.
Sem personalização
Não personalize ou contorne as alterações nas informações de afinidade dos contatos. Eles estão integrados à estrutura e fazer qualquer alteração o deixará fora de conformidade. Nunca altere as configurações padrão ou forneça alternativas de backdoor.