Ab Android 10 erfolgt der Zugriff auf kontaktaffinitätsbezogene Daten, die von der Kontaktanbieterkomponente (der in der Kontakt-App eines Geräts angezeigten Datenquelle) verwaltet werden, anders als in Android 9 und niedriger.
Vor Android 10 nutzten Apps den Kontaktanbieter, um auf Daten zuzugreifen und diese zwischen einem Gerät und Onlinediensten zu übertragen. Android 10 bietet Änderungen hinsichtlich der Datenzugänglichkeit, um eine erhöhte Privatsphäre der Benutzer auf allen Android 10-Geräten zu gewährleisten, die den Kontaktanbieter verwenden. Zum einen enthält die zugrunde liegende Datenbank keine Kontaktaffinitätsdaten. Daher können Apps nicht darauf schreiben oder davon lesen. Zu den Änderungen gehören:
- Der Kontaktanbieter zeichnet keine Daten zur Kontaktaffinität auf, z. B. wie oft ein Benutzer kontaktiert wurde, wann der letzte Kontakt stattfand, welche App verwendet wurde, welche Person kontaktiert wurde oder zugehörige historische Daten.
- Die
MultiAutoCompleteTextView
Klasse in der Contacts Provider-API zur automatischen Vervollständigung sortiert Abfrageergebnisse nicht nach Interaktionszähler. - Das Android-Framework bietet kein implizites Kontaktranking. (Das benutzergesteuerte, explizite Kontaktranking (z. B. markierte Kontakte) bleibt jedoch bestehen.)
Um diese Änderungen zu implementieren, führen Sie einen der folgenden Schritte aus:
- Verwenden Sie den neuesten Kontaktanbieter.
- Aktualisieren Sie Ihre Version (wenn Sie eine gespaltene Version verwenden).
Aktualisieren Sie außerdem alle Apps, die auf den veralteten Funktionen des Kontaktanbieters basieren. API-Versionen, die als Workarounds für die veralteten Funktionen dienen , sind nicht zulässig.
Für Android 9 und niedriger wurden Kontaktinteraktionsdaten vom Kontaktanbieter nicht entfernt. Stattdessen werden Kontaktinteraktionsdaten regelmäßig (ungefähr einmal pro Tag) gelöscht, um das Äquivalent in Android 10 zu simulieren. Der Kontaktanbieter speichert diese Informationen, jedoch nur vorübergehend.
API-Änderungen
Es wird erwartet, dass diese Änderungen große Auswirkungen auf APIs haben werden. Beispielsweise wird die automatische Vervollständigung des Rankings nicht so gut funktionieren. Mögliche Auswirkungen auf das API-Verhalten sind unter anderem:
- Der Kontaktanbieter speichert die Präferenzen oder Interaktionen eines Benutzers für den Kontakt nicht in den Tabellenspalten
ContactsContract.Contacts
. - Die Autocomplete-API sortiert die Ergebnisse nicht nach Interaktionszähler.
- Die Spalten
TIMES_CONTACTED
/TIMES_USED
undLAST_TIME_CONTACTED
/LAST_TIME_USED
werden nicht aktualisiert. - Diese werden beim Upgrade auf Android 10 gelöscht (entweder auf
null
oder auf 0 gesetzt, abhängig von den betroffenen Spalten). - Die Rangfolge in den Autocomplete-Abfrage-APIs gibt Ergebnisse alphabetisch sortiert zurück, niemals nach Affinitätsinformationen.
- API-Aufrufe für häufige Kontakte (z. B. mit der Filterzeichenfolge
CONTENT_FREQUENT_URI
) geben keine Ergebnisse zurück.
Wenn eines der veralteten Contacts Provider API-Elemente Zähler verwendet, enthalten diese Zähler (bei Verwendung in Android 10) im Allgemeinen 0 und geben bei Abfrage 0 zurück. Aktualisierungsanfragen von betroffenen APIs werden ignoriert. Beispielsweise war die Klasse ContactsContract.DataUsageFeedback
veraltet, daher werden Aktualisierungs- und Löschaufrufe dieser Klasse ignoriert.
Felder, die sich auf APIs auswirken
Diese Felder haben sich in Android 10 geändert:
-
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
Die betroffenen Felder in Android 10 können in verschiedenen APIs vorhanden sein, wie in der folgenden Tabelle angegeben. Veraltete API-Felder geben das aufgeführte Verhalten zurück. Da eines dieser veralteten Felder möglicherweise in mehreren Ihrer APIs verwendet wird, überprüfen Sie Ihre Anwendungsfälle.
Klasse | API-Felder | 10 Retouren |
---|---|---|
ContactsContract.Contacts ContactsContract.RawContacts ContactsContract.Data ContactsContract.Entity | ContactOptionsColumns TIMES_CONTACTED LAST_TIME_CONTACTED | Diese Spalten enthalten immer 0, unabhängig davon, wie sie verwendet werden. Versuche, sie zu ändern, werden ignoriert. |
Contacts | markAsContacted() | Keine Operation. |
ContactsContract.DataUsageFeedback | | Keine Operation. |
ContactsContract.Contacts | Strequent ( markiert + häufig)CONTENT_STREQUENT_FILTER_URI CONTENT_STREQUENT_URI CONTENT_FREQUENT_URI | Gibt nur markierte Kontakte zurück. Es wurden keine häufigen Kontakte zurückgegeben. |
ContactsContract.CommonDataKinds.Email ContactsContract.CommonDataKinds.Phone ContactsContract.CommonDataKinds.Callable | Filter-APIs (auch Autovervollständigung genannt). | Ergebnisse nicht nach Affinität sortiert. Diese sind nach Sternchen und Namen sortiert. |
Alternativen
Es gibt keine Alternativen zu den veralteten API-Feldern. Problemumgehungen zur Umgehung dieser Einschränkungen, sei es in Form neuer APIs oder neuer Felder, sind nicht zulässig.
Implementierung
Sie müssen nichts tun, um diese Änderungen umzusetzen. Sie sind Teil der Initiative zur Verbesserung der Privatsphäre der Benutzer auf der Android-Betriebssystemplattform. Wenn Ihre Apps jedoch auf veraltete Funktionen angewiesen sind, möchten Sie möglicherweise Ihre Apps aktualisieren, um etwaige Änderungen auszugleichen. Wenn Sie außerdem eine abgespaltene Version des Kontaktanbieters verwenden, müssen Sie Ihren Kontaktanbieter aktualisieren.
Keine Anpassung
Passen Sie die Änderungen der Affinitätsinformationen der Kontakte nicht an oder umgehen Sie sie nicht. Sie sind in das Framework integriert und jede Änderung führt dazu, dass Sie nicht mehr konform sind. Ändern Sie niemals die Standardeinstellungen und bieten Sie keine Backdoor-Alternativen an.