Health Connect będzie dostarczana z Androidem 14 jako wspólna warstwa przechowywania danych o zdrowiu i aktywności fizycznej użytkowników, chroniona przez szczegółowe uprawnienia i dostępna jako aplikacja systemowa Androida (w tym dokumencie nazywana modułem „framework”).
Deweloperzy powinni traktować pakiet APK Health Connect (Android 13) jako warstwę zgodności wstecznej dla modelu platformy. Model platformy zachowa 100% funkcjonalności swojego poprzednika w formie pliku APK.
Podczas przejścia z Androida 13 na 14 niezwykle ważne jest, aby korzystanie z urządzenia było jak najbardziej płynne i intuicyjne.
W tym dokumencie przedstawiamy plan migracji, podajemy przykładowe scenariusze migracji i wymieniamy zmiany w pakiecie Jetpack SDK, który ułatwia dostęp do interfejsu Health Connect API.
Plan migracji
- Po wydaniu Androida 14 Google zacznie udostępniać Health Connect jako aplikację systemową Androida.
- Gdy funkcje będą identyczne, dane zostaną uzupełnione z pliku APK.
- Wszystkie punkty wejścia będą kierować na interfejs aplikacji systemowej.
- Rozpocznie się migracja danych. Podczas migracji interfejsy API modułu zostaną zawieszone ze stanem „Migracja w toku”. Będzie on też widoczny w interfejsie Health Connect.
- Po zakończeniu migracji plik APK można odinstalować.
Przykładowe scenariusze migracji
Oto przykładowe scenariusze, które wyjaśniają proces migracji w przypadku obu typów danych:interval
i series
.
Przykład 1. Bieganie (dane interwałowe)
Użytkownik zbierał dane o bieganiu przez 10 lat, poświęcając na to godzinę dziennie. Oznacza to:
- Zapisy sesji ćwiczeń: 365 * 10 * 1
- Kroki: 365 * 10 * 1
- Kalorie: 365 * 10 * 1
- Łącznie = 365 * 10 * 3 (365 * 30) = 10 950
Biorąc pod uwagę,że 1 partia to 3000 rekordów, dane obejmują około 4 partie.
Nasze testy wewnętrzne potwierdziły, że wstawienie typowego fragmentu zajmuje około sekundy, więc dane w przykładzie zostaną przeniesione w około 4 sekundy.
Przykład 2. Tętno (dane szeregowe)
Użytkownik zebrał dane o tętnie z 5 lat (z rekordem tworzonym co minutę), co daje łącznie 2 628 000 rekordów.
Przy 3000 rekordów na fragment dane są rozdzielone na 876 fragmentów. Biorąc pod uwagę, że wstawienie 1 bloku zajmuje około sekundy, migracja danych potrwa mniej niż 15 minut.
Proponowany proces migracji
Zdecydowaliśmy się na natychmiastową migrację. W praktyce oznacza to, że plik APK stanie się nieaktywny, gdy tylko urządzenie zostanie zaktualizowane do Androida 14, przy minimalnej interwencji użytkownika.
Oto ogólny proces migracji:
- Użytkownik aktualizuje urządzenie do Androida 14.
- Jetpack 14 kieruje użytkownika do interfejsów API modułu i blokuje go, gdy trwa migracja.
- Proces migracji rozpoczyna się, gdy wersja modułu jest zgodna z pakietem APK pod względem funkcji, czyli zawiera ten sam zestaw funkcji lub więcej. Po rozpoczęciu procesu migracji plik APK przenosi uprawnienia i dane.
- Jeśli obie wersje nie są ze sobą zgodne pod względem funkcji, moduł trzeba będzie uaktualnić. Po zakończeniu uaktualniania rozpocznie się proces migracji.
- Po zakończeniu migracji stan zmieni się na „Migracja zakończona”, a interfejsy API modułu zostaną odblokowane.
- Teraz możesz odinstalować plik APK.
Elementy interfejsu migracji
Moduł platformy wyświetla te ekrany w celu edukacyjnym, zarówno przed migracją, jak i w jej trakcie:
Rysunek 1. Jeśli pakiet APK Health Connect nie jest „świadomy migracji”, wyświetli się komunikat z prośbą o zaktualizowanie pakietu APK. Jeśli użytkownik odrzuci aktualizację, moduł będzie nadal działać i gromadzić uprawnienia oraz dane.

Rysunek 2. Jeśli moduł platformy wymaga aktualizacji, aby stać się zgodny z funkcją, wyświetli się prośba o przeprowadzenie aktualizacji i ponowne uruchomienie urządzenia. Jeśli użytkownik odrzuci aktualizację, moduł będzie nadal działać i zacznie gromadzić uprawnienia i dane.

Rysunek 3. Podczas procesu migracji wyświetla się spinner z tekstem informującym o synchronizacji danych.

Dane po usunięciu duplikatów
Jeśli moduł platformy zaczął uzyskiwać dane i uprawnienia przed przeprowadzeniem migracji lub przywracaniem z chmury, obowiązują te zasady:
Uprawnienia
Jeśli uprawnienia są obecne w module platformy, podczas procesu migracji wszystkie zduplikowane uprawnienia uzyskane z pliku APK są ignorowane.
Dane
Podczas migracji zduplikowane dane pochodzące z pliku APK są ignorowane. Preferowane są nowsze dane z modułu.
Dane są usuwane zduplikowane w clientRecordId
, jeśli identyfikator rekordu jest podany przez klienta. W przeciwnym razie przedziały czasowe (startTime
i endTime
w przypadku rekordów wewnętrznych oraz time
w przypadku rekordów natychmiastowych) są traktowane jako klucz wraz z typem danych i nazwą pakietu aplikacji.
Zmiany w pakiecie Jetpack SDK
Pakiet SDK Jetpack służy jako wspólny punkt integracji zarówno pakietu APK Health Connect, jak i interfejsów API platformy Health Connect.
Producenci OEM mogą rozpocząć integrację z Jetpackiem 13, aby po udostępnieniu Jetpacka 14 móc wykorzystać nową bibliotekę i skompilować ją w Androidzie 14.
Udostępnimy nową wersję pakietu SDK, która będzie obsługiwać przejście na Androida 14. Aby zapewnić płynne przejście, musisz wprowadzić pewne zmiany w dotychczasowej integracji.
Deklaracja uprawnień
W Androidzie 13 uprawnienia deklaruje się za pomocą niestandardowego formatu uprawnień w pliku zasobów połączonym z manifestem:
#AndroidManifest.xml
<activity>
android:name=".RationaleActivity"
android:exported="true">
<intent-filter>
<action android:name="androidx.health.ACTION_SHOW_PERMISSIONS_RATIONALE"/>
</intent-filter>
<meta-data
android:name="health_permissions"
android:resource="@array/health_permissions"/>
</activity>
<queries>
<package android:name="com.google.android.apps.healthdata" />
</queries>
#health_permissions.xml
<resources>
<array name="health_permissions">
<item>androidx.health.permission.SleepSession.READ</item>
<item>androidx.health.permission.SleepStage.READ</item>
<item>androidx.health.permission.Weight.READ</item>
<item>androidx.health.permission.Weight.WRITE</item>
</array>
</resources>
Aby obsługiwać Androida 14, deweloperzy muszą przejść na standardowy format uprawnień:
#AndroidManifest.xml
<uses-permission android:name=”android.permission.health.READ_SLEEP” />
<uses-permission android:name=”android.permission.health.READ_WEIGHT” />
<uses-permission android:name=”android.permission.health.WRITE_WEIGHT” />
<activity>
android:name=".RationaleActivity"
android:exported="true">
<intent-filter>
<action android:name="androidx.health.ACTION_SHOW_PERMISSIONS_RATIONALE" />
</intent-filter>
</activity>
<queries>
<package android:name="com.google.android.apps.healthdata"/>
</queries>
Otwieranie Health Connect
Większość aplikacji innych firm ma przycisk, który otwiera aplikację Health Connect, np. przycisk „Zarządzaj dostępem” w Fitbicie.
Na Androidzie 13 możesz otworzyć aplikację Health Connect, używając nazwy pakietu lub działania androidx.health.ACTION_HEALTH_CONNECT_SETTINGS
.
W Androidzie 14 musisz użyć działania intencji określonego w pakiecie Jetpack SDK, które ma różne wartości w zależności od wersji Androida, na której działa:
@get:JvmName("getHealthConnectSettingsAction")
@JvmStatic val
ACTION_HEALTH_CONNECT_SETTINGS
Pobieranie klienta Health Connect
Utworzyliśmy jeden interfejs API o nazwie sdkStatus
, dostępny w Jetpack 11, który zastępuje 2 inne wycofane interfejsy API: IsSdkSupported()
i isProviderAvailable()
.
Zmiany w interfejsie API rekordów sesji
W ramach wersji alfa10 usunęliśmy 4 podtypy ExerciseSession
:
ExerciseEvent
ExerciseLaps
ExerciseRepetitions
SwimmingStrokes
Podobnie jak w przypadku ExerciseSessionRecord
, typ SleepStage
stanie się podtypem SleepSession
.
Zarówno podtypy ExerciseSessionRecord
, jak i zmiany SleepSession
zostaną udostępnione w ramach aktualizacji pakietu SDK w kwietniu.
Aktualizacja typu sesji ćwiczeń
Te typy sesji ćwiczeń nie będą już obsługiwane, ale w późniejszym terminie zostaną dodane jako typy segmentów:
EXERCISE_TYPE_BACK_EXTENSION
EXERCISE_TYPE_BARBELL_SHOULDER_PRESS
EXERCISE_TYPE_BENCH_PRESS
EXERCISE_TYPE_BENCH_SIT_UP
EXERCISE_TYPE_BURPEE
EXERCISE_TYPE_CRUNCH
EXERCISE_TYPE_DEADLIFT
EXERCISE_TYPE_DUMBBELL_CURL_LEFT_ARM
EXERCISE_TYPE_DUMBBELL_CURL_RIGHT_ARM
EXERCISE_TYPE_DUMBBELL_FRONT_RAISE
EXERCISE_TYPE_DUMBBELL_LATERAL_RAISE
EXERCISE_TYPE_DUMBBELL_TRICEPS_EXTENSION_LEFT_ARM
EXERCISE_TYPE_DUMBBELL_TRICEPS_EXTENSION_RIGHT_ARM
EXERCISE_TYPE_DUMBBELL_TRICEPS_EXTENSION_TWO_ARM
EXERCISE_TYPE_FORWARD_TWIST
EXERCISE_TYPE_JUMPING_JACK
EXERCISE_TYPE_JUMP_ROPE
EXERCISE_TYPE_LAT_PULL_DOWN
EXERCISE_TYPE_LUNGE
EXERCISE_TYPE_PLANK
EXERCISE_TYPE_SQUAT
EXERCISE_TYPE_UPPER_TWIST
Rodzaje wymiany:
EXERCISE_TYPE_HIGH_INTENSITY_INTERVAL_TRAINING
EXERCISE_TYPE_STRENGTH_TRAINING
EXERCISE_TYPE_CALISTHENICS
Obsługa historii zmian
Dzienniki zmian nie zostaną przeniesione w ramach przejścia z pliku APK na Androida 14.
Po zakończeniu migracji zaczniesz otrzymywać wyjątki TOKEN_EXPIRED
lub TOKEN_INVALID
. Należy je obsługiwać w ten sposób (w kolejności preferencji):
1. Odczytywanie i usuwanie duplikatów wszystkich danych od czasu ostatniego odczytu lub z ostatnich 30 dni
Przechowywać sygnaturę czasową ostatniego odczytu danych z Health Connect przez aplikację. Po wygaśnięciu tokena dane należy ponownie odczytać z tej wartości lub z poprzednich 30 dni (w zależności od tego, która z tych wartości jest mniejsza) i usunąć duplikaty z wcześniej odczytanych danych za pomocą identyfikatora UUID.
2. Odczytywanie danych od sygnatury czasowej „ostatniego odczytu”
Ustal sygnaturę czasową wskazującą, kiedy dane były ostatnio odczytywane z Health Connect, a po wygaśnięciu tokena odczytaj wszystkie dane po tej wartości.
3. Usuń i ponownie odczytaj dane z ostatnich 30 dni
Usunąć wszystkie dane odczytane z Health Connect w ciągu ostatnich 30 dni i odczytać je ponownie (np. tak jak to się dzieje, gdy aplikacje po raz pierwszy integrują się z Health Connect).
4. Nie rób nic (czyli ponownie odczytaj dane z ostatnich 30 dni i nie usuwaj duplikatów)
Należy go używać w ostateczności, ponieważ wiąże się z ryzykiem wyświetlania zduplikowanych danych. Deweloperzy powinni raczej rozważyć opcje 1–3, ponieważ identyfikatory UUID powinny być już wdrożone.
Testowanie interfejsów API Androida 14 za pomocą pakietu Jetpack SDK
Pakiet SDK Jetpack na Androida 14 zostanie udostępniony 7 czerwca 2023 r. wraz z wersją beta 3 Androida 14. Aby móc używać pakietu SDK Jetpack na Androida 14, musisz zacząć kompilować aplikację pod kątem Androida 14.
Jeśli chcesz przetestować swoje rozwiązanie na wersjach Androida w programie Developer Preview przed 7 czerwca, skontaktuj się z osobą kontaktową w Google, aby uzyskać pomoc.
Jeśli chcesz przetestować swoje rozwiązanie w wersji Beta 3, wprowadź w pliku APK te zmiany:
- Ustaw
compileSDKPreview = UpsideDownCake
. - Zaktualizuj plik manifestu, aby uwzględnić intencję dla Androida 14:
# AndroidManifest.xml
<uses-permission android:name=”android.permission.health.READ_SLEEP”/>
<uses-permission android:name=”android.permission.health.READ_WEIGHT”/>
<uses-permission android:name=”android.permission.health.WRITE_WEIGHT”/>
<activity>
android:name=".RationaleActivity"
android:exported="true">
<intent-filter>
<action android:name="androidx.health.ACTION_SHOW_PERMISSIONS_RATIONALE"/>
</intent-filter>
</activity>
<activity-alias>
android:name="AndroidURationaleActivity"
android:exported="true"
android:targetActivity=".RationaleActivity"
android:permission="android.permission.START_VIEW_PERMISSION_USAGE">
<intent-filter>
<action android:name="android.intent.action.VIEW_PERMISSION_USAGE" />
<category android:name="android.intent.category.HEALTH_PERMISSIONS" />
</intent-filter>
</activity-alias>
<queries>
<package android:name="com.google.android.apps.healthdata" />
</queries>
Dostosowanie OEM
W Androidzie 14 ustawienia prywatności i zarządzania danymi w Health Connect znajdują się w Ustawieniach systemu.
Aby ekrany zarządzania danymi i uprawnieniami wyglądały jak część urządzenia, Health Connect oferuje motywy OEM za pomocą niestandardowych nakładek.
Dokumentację dotyczącą stylizacji OEM znajdziesz w dokumentacji Usług mobilnych Google w Health Connect. Aby wyświetlić tę stronę, może być konieczne zalogowanie się w Google Developers.