Informacje o dostawcy kontaktów i powiązaniach

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 i LAST_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:

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

update
delete

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

CONTENT_FILTER_URI
ENTERPRISE_CONTENT_FILTER_URI

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.