Począwszy od Androida 10, dostęp do danych związanych z powinowactwami kontaktów zarządzanych przez komponent Contacts Provider (źródło danych widocznych w aplikacji kontaktów na urządzeniu) jest uzyskiwany inaczej niż w Androidzie 9 i starszych wersjach.
Przed wersją Androida 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 korzystających z dostawcy kontaktów. Po pierwsze, podstawowa baza danych nie zawiera danych o powinowactwach kontaktów. Dlatego aplikacje nie mogą na nim zapisywać ani czytać. Zmiany obejmują:
- Dostawca kontaktów nie rejestruje danych związanych z powinowactwami kontaktów, takich jak liczba kontaktów z użytkownikiem, czas ostatniego kontaktu, używana aplikacja, osoba, z którą się kontaktowano, ani żadne powiązane dane historyczne.
- Klasa
MultiAutoCompleteTextView
w interfejsie API autouzupełniania dostawcy kontaktów nie sortuje wyników zapytań według licznika interakcji. - Struktura systemu Android nie zapewnia ukrytego rankingu kontaktów. (Jednakże kontrolowany przez użytkownika, jawny ranking kontaktów (takich jak kontakty oznaczone gwiazdką ) pozostaje).
Aby wdrożyć te zmiany, wykonaj jedną z następujących czynności:
- Użyj najnowszego dostawcy kontaktów.
- Zaktualizuj swoją wersję (jeśli używasz wersji rozwidlonej).
Ponadto zaktualizuj wszystkie aplikacje korzystające z przestarzałych funkcji dostawcy kontaktów . Wersje interfejsu API zaprojektowane jako obejścia przestarzałych funkcji są niedozwolone.
W przypadku Androida 9 i starszych wersji dane dotyczące interakcji z kontaktami od dostawcy kontaktów nie zostały usunięte. Zamiast tego dane dotyczące interakcji kontaktowych są czyszczone okresowo (mniej więcej raz dziennie) w celu symulacji odpowiednika w systemie Android 10. Dostawca kontaktów przechowuje te informacje, ale tylko tymczasowo.
Zmiany w API
Oczekuje się, że zmiany te będą miały duży wpływ na interfejsy API. Na przykład ranking autouzupełniania również nie będzie skuteczny. Potencjalny wpływ na zachowanie interfejsu API obejmuje:
- Dostawca kontaktów nie będzie przechowywać preferencji użytkownika ani interakcji z kontaktem w kolumnach tabeli
ContactsContract.Contacts
. - Interfejs API autouzupełniania nie sortuje wyników według licznika interakcji.
- Kolumny
TIMES_CONTACTED
/TIMES_USED
iLAST_TIME_CONTACTED
/LAST_TIME_USED
nie zostaną zaktualizowane. - Są one usuwane (na wartość
null
lub ustawianą na 0, w zależności od kolumn, których to dotyczy) po aktualizacji do Androida 10. - Ranking w interfejsach API zapytań autouzupełniania zwraca wyniki posortowane alfabetycznie, nigdy według informacji o powinowactwie.
- Wywołania API dotyczące częstych kontaktów (na przykład przy użyciu ciągu filtrującego
CONTENT_FREQUENT_URI
) nie zwracają żadnych wyników.
Ogólnie rzecz biorąc, jeśli którykolwiek z przestarzałych elementów interfejsu API dostawcy kontaktów korzysta z liczników, liczniki te (jeśli są używane w systemie Android 10) zawierają wartość 0 i zwracają wartość 0 w przypadku zapytania. Żądania aktualizacji z interfejsów API, których dotyczy problem, są ignorowane. Na przykład klasa ContactsContract.DataUsageFeedback
była przestarzała, dlatego wywołania aktualizacji i usuwania tej klasy są ignorowane.
Pola mające wpływ na interfejsy API
Te pola uległy zmianie 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
Pola, których to dotyczy, w systemie Android 10 mogą występować w różnych interfejsach API, jak pokazano w poniższej tabeli. Przestarzałe pola API zwracają zachowania zgodnie z listą. Ponieważ jedno z tych przestarzałych pól może być używane w kilku interfejsach API, sprawdź swoje przypadki użycia.
Klasa | Pola API | 10 powrotów |
---|---|---|
ContactsContract.Contacts ContactsContract.RawContacts ContactsContract.Data ContactsContract.Entity | ContactOptionsColumns TIMES_CONTACTED LAST_TIME_CONTACTED | Te kolumny zawsze zawierają 0, niezależnie od sposobu ich użycia. Próby ich modyfikacji są ignorowane. |
Contacts | markAsContacted() | Bez operacji. |
ContactsContract.DataUsageFeedback | | Bez operacji. |
ContactsContract.Contacts | Silny ( gwiazdkowany + częsty)CONTENT_STREQUENT_FILTER_URI CONTENT_STREQUENT_URI CONTENT_FREQUENT_URI | Zwraca tylko kontakty oznaczone gwiazdką . Nie zwrócono żadnych częstych kontaktów. |
ContactsContract.CommonDataKinds.Email ContactsContract.CommonDataKinds.Phone ContactsContract.CommonDataKinds.Callable | Filtruj (zwane także autouzupełnianiem) interfejsy API | Wyniki nie są posortowane według powinowactwa. Są one posortowane według oznaczenia gwiazdką i nazwy . |
Alternatywy
Nie ma alternatyw dla przestarzałych pól API. Obejścia mające na celu obejście tych ograniczeń, czy to w postaci nowych interfejsów API, czy nowych pól, są niedozwolone.
Realizacja
Aby wdrożyć te zmiany, nie musisz nic robić. Są częścią inicjatywy mającej na celu zwiększenie prywatności użytkowników na platformie systemu operacyjnego Android. Jeśli jednak Twoje aplikacje korzystają z przestarzałych funkcji, możesz je zaktualizować, aby skompensować wszelkie zmiany. Ponadto, jeśli używasz rozwidlonej wersji dostawcy kontaktów, musisz zaktualizować swojego dostawcę kontaktów.
Brak dostosowywania
Nie dostosowuj ani nie obchodź zmian w informacjach o koligacji kontaktów. Są wbudowane w framework i wprowadzenie jakichkolwiek zmian powoduje utratę zgodności. Nigdy nie zmieniaj ustawień domyślnych ani nie udostępniaj alternatyw typu backdoor.