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. Dlatego aplikacje nie mogą zapisywać ani odczytywać danych z tego pliku. 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 automatycznego uzupełniania danych o kontaktach nie sortuje wyników zapytań według licznika interakcji. - Platforma Android nie udostępnia domyślnego rankingu kontaktów. (nadal jednak można sterować wyraźnie określonym przez użytkownika rankingiem kontaktów, np. oznaczonych gwiazdką).
Aby wdrożyć te zmiany, wykonaj jedną z tych czynności:
- Użyj najnowszego 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 interakcji 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 często kontaktowanych osób (np. przy użyciu ciągu filtra
CONTENT_FREQUENT_URI
) nie dają ż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ą wartości zgodnie z poniższą listą. Ponieważ jedno z tych przestarzałych pól może być używane w kilku interfejsach API, sprawdź, czy nie jest to konieczne w Twoim przypadku.
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 autocomplete)
|
Wyniki nie są sortowane według podobieństwa. Są one posortowane według oznaczonego gwiazdką i nazwy. |
Alternatywy
Nie ma alternatyw dla przestarzałych 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 mającej na celu zwiększenie prywatności użytkowników na platformie Android. Jeśli jednak Twoje aplikacje korzystają z funkcji wycofanych, warto je zaktualizować, aby uwzględnić zmiany. Jeśli używasz odgałęzi wersji dostawcy kontaktów, musisz zaktualizować dostawcę kontaktów.
Brak dostosowywania
Nie dostosowuj ani nie obejdź zmian w informacjach 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 udostępniaj alternatywnych sposobów dostępu.