Od Androida 10 dane związane z powiązaniem kontaktów, zarządzane przez komponent Provider kontaktów (źródło danych wyświetlanych w aplikacji Kontakty na urządzeniu), są dostępne w inny sposób niż w Androidzie 9 i starszych.
Przed Androidem 10 aplikacje korzystały z usługi Kontakty, aby uzyskiwać dostęp do danych i przenosić je między urządzeniem a usługami internetowymi. Zmiany funkcji Androida 10 dotyczące dostępu do danych, które mają zapewnić większą prywatność użytkowników na wszystkich urządzeniach z Androidem 10 korzystających z usługi dostawcy kontaktów. Po pierwsze, baza danych nie zawiera danych o powiązaniach kontaktów. Aplikacje nie mogą więc zapisywać danych w tym folderze ani ich z niego odczytywać. Zmiany obejmują:
- Dostawca danych kontaktów nie rejestruje danych związanych z powiązaniem kontaktów, takich jak liczba kontaktów z użytkownikiem, ostatni kontakt, użyta aplikacja, osoba, z którą nawiązano kontakt, ani żadnych powiązanych danych historycznych.
- Klasa
MultiAutoCompleteTextView
w interfejsie API autouzupełniania dostawcy kontaktów nie sortuje wyników zapytania według licznika interakcji. - Platforma Android nie zapewnia domyślnego rankingu kontaktów. (kontrolowany przez użytkowników, wulgarny ranking kontaktów (np. kontakty oznaczone gwiazdką) pozostaje jednak bez zmian.
Aby wdrożyć te zmiany, wykonaj jedną z tych czynności:
- Użyj najnowszej wersji dostawcy kontaktów.
- Zaktualizuj wersję (jeśli używasz wersji odgałęzionej).
Ponadto zaktualizuj wszystkie aplikacje, które korzystają z wycofanych funkcji dostawcy kontaktów. Wersje interfejsu API zaprojektowane jako obejście wycofanych funkcji nie są dozwolone.
W przypadku Androida 9 i starszych dane o interakcjach z kontaktami z usługi Kontakty nie zostały usunięte. Zamiast tego dane o interakcjach z kontaktami są okresowo usuwane (około raz dziennie), aby symulować działanie Androida 10. Dostawca kontaktów przechowuje te informacje tylko tymczasowo.
Zmiany w interfejsie API
Te zmiany mogą mieć duży wpływ na interfejsy API. Na przykład ranking autouzupełniania nie będzie tak skuteczny. Możliwe skutki dla działania interfejsu API:
- Dostawca kontaktów nie będzie przechowywać w kolumnach tabeli
ContactsContract.Contacts
preferencji użytkownika ani jego interakcji z kontaktem. - Interfejs Autocomplete API nie sortuje wyników według licznika interakcji.
- Kolumny
TIMES_CONTACTED
/TIMES_USED
iLAST_TIME_CONTACTED
/LAST_TIME_USED
nie zostaną zaktualizowane. - Po przejściu na Androida 10 te wartości zostaną wyczyszczone (ustawione na
null
lub 0, w zależności od kolumn, których dotyczą). - Ranking w interfejsach API zapytań autouzupełniania zwraca wyniki posortowane alfabetycznie, nigdy według informacji o powiązaniach.
- Wywołania interfejsu API dotyczące kontaktów powtarzających się często (np. przy użyciu ciągu znaków filtra
CONTENT_FREQUENT_URI
) nie zwracają żadnych wyników.
Ogólnie, jeśli któreś z wycofanych elementów interfejsu API dostawcy kontaktów używają liczników, te liczniki (w wersji Android 10) zawierają wartość 0 i zwracają 0 w przypadku zapytania. Żądania aktualizacji z dotkniętych interfejsów API są ignorowane. Na przykład klasa ContactsContract.DataUsageFeedback
została wycofana, więc wywołania metody update i delete dotyczące tej klasy są ignorowane.
Pola, które wpływają na interfejsy API
W Androidzie 10 zmieniły się te pola:
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
Pola, których dotyczy zmiana w Androidzie 10, mogą występować w różnych interfejsach API, jak wskazano w tabeli poniżej. Wycofane pola interfejsu API zwracają podane zachowania. Jedno z tych przestarzałych pól może być używane w kilku interfejsach API, dlatego sprawdź, czy nie dotyczy to Twoich przypadków użycia.
Kategoria | Pola interfejsu API | 10 zwrotów |
---|---|---|
ContactsContract.Contacts ContactsContract.RawContacts ContactsContract.Data ContactsContract.Entity
|
ContactOptionsColumns TIMES_CONTACTED LAST_TIME_CONTACTED
|
Te kolumny zawsze zawierają wartość 0, niezależnie od sposobu ich użycia. Próby ich modyfikacji są ignorowane. |
Contacts
|
markAsContacted() |
Brak operacji. |
ContactsContract.DataUsageFeedback
|
|
Brak operacji. |
ContactsContract.Contacts
|
Strequent (oznaczone gwiazdką i częste)CONTENT_STREQUENT_FILTER_URI CONTENT_STREQUENT_URI CONTENT_FREQUENT_URI
|
Zwraca tylko kontakty oznaczone gwiazdką. Nie znaleziono często kontaktowanych kontaktów. |
ContactsContract.CommonDataKinds.Email ContactsContract.CommonDataKinds.Phone ContactsContract.CommonDataKinds.Callable
|
Interfejsy API do filtrowania (nazywane też interfejsami do autouzupełniania)
|
Wyniki nie są posortowane według podobieństwa. Są one posortowane według oznaczonych gwiazdką i nazwy. |
Alternatywy
Nie ma alternatywy dla wycofanych pól interfejsu API. Obejścia tych ograniczeń, np. w postaci nowych interfejsów API lub nowych pól, są niedozwolone.
Implementacja
Aby wdrożyć te zmiany, nie musisz nic robić. Są one częścią inicjatywy zwiększania prywatności użytkowników na platformie Android. Jeśli jednak Twoje aplikacje korzystają z funkcji wycofanych z użycia, warto je zaktualizować, aby uwzględnić zmiany. Jeśli używasz rozwidlonej wersji dostawcy kontaktów, musisz go też zaktualizować.
Brak dostosowywania
Nie dostosowuj ani nie obejdź zmian dotyczących informacji o powiązaniach kontaktów. Są one wbudowane w ramy, a wprowadzenie jakichkolwiek zmian powoduje, że przestajesz spełniać wymagania. Nigdy nie zmieniaj ustawień domyślnych ani nie podawaj alternatywnych.