Począwszy od Androida 10, dane związane kontakty powinowactwie-zarządzany przez Kontakt Provider składnika (źródła danych widać w urządzeniu aplikacji kontaktów) jest dostępny w Android inaczej niż 9 oraz obniżyć.
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 koligacji 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, czas ostatniego kontaktu, używana aplikacja, osoba, z którą się kontaktowano, ani żadne powiązane dane historyczne.
-
MultiAutoCompleteTextView
klasa w kontaktach Provider autouzupełniania API nie sortowania wyników zapytania przez licznik interakcji. - Platforma Android nie zapewnia niejawnego rankingu kontaktów. (Jednak kontrolowany przez użytkownika, jednoznacznych kontakty rankingu (takie jak kontakty oznaczone gwiazdką) pozostaje).
Aby wprowadzić 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, należy zaktualizować wszystkie aplikacje, które opierają się na nieaktualnych funkcji Kontakt Provider . Wersje API służące do obejścia być nieaktualne funkcje nie są dozwolone.
W przypadku Androida 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:
- Styki Dostawca nie będzie przechowywać ustawienia dla danego użytkownika lub interakcji z, kontaktu w
ContactsContract.Contacts
kolumn tabeli. - Interfejs API autouzupełniania nie sortuje wyników według licznika interakcji.
-
TIMES_CONTACTED
/TIMES_USED
iLAST_TIME_CONTACTED
/LAST_TIME_USED
kolumny nie zostaną zaktualizowane. - Te jasne (albo
null
lub wartość 0, w zależności od dotkniętych kolumn) po aktualizacji do Androida 10. - Ranking w interfejsach API autouzupełniania zapytań zwraca wyniki posortowane alfabetycznie, nigdy według informacji o powinowactwie.
- Wywołania API do częstych kontaktów (na przykład za pomocą ciąg filtru
CONTENT_FREQUENT_URI
) 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, ContactsContract.DataUsageFeedback
klasa była przestarzała, więc aktualizować i usuwać rozmowy 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 | Strequent (wystąpił + częstych)CONTENT_STREQUENT_FILTER_URI CONTENT_STREQUENT_URI CONTENT_FREQUENT_URI | Zwraca wystąpił tylko kontakty. 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 posortowane według podobieństwa. Są one klasyfikowane według gwiazdkami i nazwy. |
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, nie są dozwolone.
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 korzystają z przestarzałych funkcji, możesz chcieć je zaktualizować, 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.