Począwszy od Androida 10, dostęp do danych związanych z koligacjami kontaktów, zarządzanych przez komponent Contacts Provider (źródło danych widocznych w aplikacji kontaktów urządzenia) jest inny niż w Androidzie 9 i niższych.
W wersjach wcześniejszych niż Android 10 aplikacje korzystały z dostawcy kontaktów w celu uzyskiwania dostępu do danych i przesyłania ich między urządzeniem a usługami online. W systemie Android 10 wprowadzono zmiany dotyczące dostępności danych, aby zapewnić większą prywatność użytkowników na wszystkich urządzeniach z systemem Android 10, które korzystają z dostawcy kontaktów. Po pierwsze, podstawowa baza danych nie zawiera danych powiązań kontaktów. Dlatego aplikacje nie mogą z niego pisać ani czytać. Zmiany obejmują:
- Dostawca kontaktów nie rejestruje danych związanych z powinowactwem kontaktów, takich jak liczba kontaktów z użytkownikiem, ostatni kontakt, używana aplikacja, osoba, z którą się kontaktowano, ani żadne powiązane dane historyczne.
- Klasa
MultiAutoCompleteTextView
w interfejsie API autouzupełniania Contacts Provider nie sortuje wyników zapytania według licznika interakcji. - Platforma Android nie zapewnia niejawnego rankingu kontaktów. (Jednak pozostaje kontrolowany przez użytkownika, jawny ranking kontaktów (takich jak kontakty oznaczone gwiazdką )).
Aby wprowadzić te zmiany, wykonaj jedną z następujących czynności:
- Skorzystaj z najnowszego dostawcy kontaktów.
- Zaktualizuj swoją wersję (jeśli używasz wersji rozwidlonej).
Ponadto zaktualizuj wszystkie aplikacje, które korzystają z przestarzałych funkcji dostawcy kontaktów . Wersje interfejsu API przeznaczone do obejścia przestarzałych funkcji nie są dozwolone.
W przypadku systemu Android 9 i starszych dane dotyczące interakcji z kontaktami od dostawcy kontaktów nie zostały usunięte. Zamiast tego dane dotyczące interakcji z kontaktami są okresowo usuwane (mniej więcej raz dziennie), aby zasymulować odpowiednik w systemie Android 10. Dostawca kontaktów przechowuje te informacje, ale tylko tymczasowo.
Zmiany API
Oczekuje się, że te zmiany będą miały duży wpływ na interfejsy API. Na przykład ranking autouzupełniania nie będzie równie skuteczny. Potencjalny wpływ na zachowanie interfejsu API obejmuje:
- Dostawca kontaktów nie przechowuje preferencji użytkownika ani interakcji z kontaktem w kolumnach tabeli
ContactsContract.Contacts
. - Interfejs API autouzupełniania nie sortuje wyników według licznika interakcji.
-
TIMES_CONTACTED
/TIMES_USED
iLAST_TIME_CONTACTED
/LAST_TIME_USED
nie zostaną zaktualizowane. - Są one jasne (na
null
lub ustawione na 0, w zależności od kolumn, których dotyczy problem) po uaktualnieniu do systemu Android 10. - Ranking w interfejsach API autouzupełniania zapytań zwraca wyniki posortowane alfabetycznie, nigdy według informacji o powinowactwie.
- Wywołania interfejsu API dla częstych kontaktów (na przykład przy użyciu ciągu filtru
CONTENT_FREQUENT_URI
) nie zwracają żadnych wyników.
Ogólnie rzecz biorąc, jeśli którykolwiek z przestarzałych elementów interfejsu Contacts Provider API używa liczników, te liczniki (jeśli są używane w systemie Android 10) zawierają 0 i zwracają 0 w przypadku zapytania. Żądania aktualizacji z interfejsów API, których dotyczy problem, są ignorowane. Na przykład klasa ContactsContract.DataUsageFeedback
jest przestarzała, więc wywołania aktualizacji i usuwania do tej klasy są ignorowane.
Pola wpływające na interfejsy API
Te pola zmieniły się w Androidzie 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
Odpowiednie pola w systemie Android 10 mogą występować w różnych interfejsach API, jak wskazano w poniższej tabeli. Przestarzałe pola interfejsu API zwracają wymienione zachowania. Ponieważ jedno z tych przestarzałych pól może być używane w kilku Twoich interfejsach API, sprawdź przypadki użycia.
Klasa | Pola API | 10 zwrotów |
---|---|---|
ContactsContract.Contacts ContactsContract.RawContacts ContactsContract.Data ContactsContract.Entity | ContactOptionsColumns TIMES_CONTACTED LAST_TIME_CONTACTED | Te kolumny zawsze zawierają 0, niezależnie od tego, jak są używane. Próby ich modyfikacji są ignorowane. |
Contacts | markAsContacted() | Bez operacji. |
ContactsContract.DataUsageFeedback | | Bez operacji. |
ContactsContract.Contacts | Częste (oznaczone gwiazdką + częste)CONTENT_STREQUENT_FILTER_URI CONTENT_STREQUENT_URI CONTENT_FREQUENT_URI | Zwraca tylko kontakty oznaczone gwiazdką . Nie zwrócono częstych kontaktów. |
ContactsContract.CommonDataKinds.Email ContactsContract.CommonDataKinds.Phone ContactsContract.CommonDataKinds.Callable | Filtruj (zwane również autouzupełnianiem) API | Wyniki nie są sortowane według podobieństwa. Są one posortowane według gwiazdek i nazw . |
Alternatywy
Nie ma alternatyw dla przestarzałych pól interfejsu API. Obejścia mające na celu obejście tych ograniczeń, zarówno w postaci nowych interfejsów API, jak i nowych pól, są niedozwolone.
Realizacja
Nie musisz nic robić, aby wprowadzić te zmiany. Są częścią inicjatywy mającej na celu zwiększenie prywatności użytkowników na platformie Android OS. Jeśli jednak Twoje aplikacje opierają się na przestarzałych funkcjach, możesz chcieć zaktualizować swoje aplikacje, aby zrekompensować wszelkie zmiany. Ponadto, jeśli używasz rozwidlonej wersji dostawcy kontaktów, musisz zaktualizować swojego dostawcę kontaktów.
Brak dostosowywania
Nie dostosowuj ani nie omijaj zmian informacji o powinowactwie kontaktów. Są one wbudowane w platformę, a wprowadzanie jakichkolwiek zmian powoduje utratę zgodności. Nigdy nie zmieniaj ustawień domyślnych ani nie udostępniaj alternatywnych tylnych drzwi.