Ab Android 10 wird anders als in Android 9 und niedriger auf kontaktaffinitätsbezogene Daten zugegriffen, die von der Contacts Provider -Komponente verwaltet werden (die Datenquelle, die in der Kontakte-App eines Geräts angezeigt wird).
Vor Android 10 verwendeten Apps den Kontaktanbieter, um auf Daten zuzugreifen und sie zwischen einem Gerät und Onlinediensten zu übertragen. Android 10 bietet Änderungen in Bezug auf den Datenzugriff, um die 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 Daten zu Kontaktaffinitäten. Daher können Apps nicht darauf schreiben oder daraus lesen. Zu den Änderungen gehören die folgenden:
- Der Kontaktanbieter zeichnet keine kontaktaffinitätsbezogenen Daten auf, wie z. B. wie oft ein Benutzer kontaktiert wurde, die letzte Kontaktzeit, die verwendete App, die kontaktierte Person oder ähnliche historische Daten.
- Die
MultiAutoCompleteTextView
-Klasse in der Autocomplete-API des Kontaktanbieters sortiert Abfrageergebnisse nicht nach Interaktionszähler. - Das Android-Framework bietet keine implizite Kontaktrangfolge. (Das benutzergesteuerte, explizite Kontaktranking (z. B. markierte Kontakte) bleibt jedoch bestehen).
Führen Sie einen der folgenden Schritte aus, um diese Änderungen zu implementieren:
- Verwenden Sie den neuesten Kontaktanbieter.
- Aktualisieren Sie Ihre Version (wenn Sie eine Fork-Version verwenden).
Aktualisieren Sie außerdem alle Apps, die auf die veralteten Funktionen des Kontaktanbieters angewiesen sind . API-Versionen, die als Workarounds für die veralteten Funktionen konzipiert sind, 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, aber nur vorübergehend.
API-Änderungen
Diese Änderungen werden voraussichtlich große Auswirkungen auf APIs haben. Beispielsweise wird das Autocomplete-Ranking nicht so gut funktionieren. Mögliche Auswirkungen auf das API-Verhalten umfassen Folgendes:
- Der Kontaktanbieter speichert keine Benutzereinstellungen oder Interaktionen mit dem Kontakt in den Tabellenspalten „
ContactsContract.Contacts
“. - Die Autocomplete-API sortiert Ergebnisse nicht nach Interaktionszähler.
- Die
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). - Das Ranking in den APIs zur automatischen Vervollständigung von Abfragen 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 Kontakte-Provider-API-Elemente Zähler verwendet, enthalten diese Zähler (bei Verwendung in Android 10) im Allgemeinen 0 und geben 0 zurück, wenn sie abgefragt werden. Aktualisierungsanfragen von betroffenen APIs werden ignoriert. Beispielsweise wurde die ContactsContract.DataUsageFeedback
-Klasse als veraltet markiert, sodass Aktualisierungs- und Löschaufrufe an diese Klasse ignoriert werden.
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 Verhalten wie aufgeführt 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. Keine häufigen Kontakte zurückgegeben. |
ContactsContract.CommonDataKinds.Email ContactsContract.CommonDataKinds.Phone ContactsContract.CommonDataKinds.Callable | APIs zum Filtern (auch als Autocomplete bezeichnet). | Ergebnisse nicht nach Affinität sortiert. Diese sind nach Stern und Name sortiert. |
Alternativen
Es gibt keine Alternativen zu den veralteten API-Feldern. Problemumgehungen zur Umgehung dieser Einschränkungen, ob in Form neuer APIs oder neuer Felder, sind nicht zulässig.
Implementierung
Sie müssen nichts tun, um diese Änderungen zu implementieren. Sie sind Teil der Initiative zur Verbesserung der Privatsphäre der Benutzer auf der Android OS-Plattform. Wenn Ihre Apps jedoch auf veraltete Funktionen angewiesen sind, möchten Sie Ihre Apps möglicherweise aktualisieren, um etwaige Änderungen auszugleichen. Wenn Sie eine gegabelte Version des Kontaktanbieters verwenden, müssen Sie außerdem 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 wenn Sie Änderungen vornehmen, verlieren Sie die Compliance. Ändern Sie niemals die Standardeinstellungen oder stellen Sie Backdoor-Alternativen bereit.