將 Health Connect 從 Android 13 (APK) 遷移至 Android 14 (架構)

Health Connect 將與 Android 14 封裝為通用資料儲存層 ,以獲得精細權限保護,並能 Android 系統應用程式 (本文件中統稱為「架構」 模組)。

開發人員應將 Health Connect APK (Android 13) 視為過時版本 架構模型的相容性層架構模型 功能與 APK 之前的版本完全對等。

從 Android 13 轉換至 14 時,請務必確保 盡可能提供流暢且直覺的使用者體驗。

本文件將概述遷移計畫,並提供一些遷移範例 並列出 Jetpack SDK 的變更,方便您存取 Health Connect API。

遷移計畫

  1. Android 14 發布後,Google 會改為提供 Health Connect 下載為 Android 系統應用程式
  2. 一旦功能一致,系統就會從 APK 中補充資料。
  3. 所有進入點都會以系統應用程式 UI 為指定目標。
  4. 資料遷移作業即將開始。在遷移作業進行期間, 模組 API 會暫停,並顯示「遷移中」狀態。這個 也會在 Health Connect UI 中顯示。
  5. 一旦遷移作業完成,即可解除安裝 APK。
,瞭解如何調查及移除這項存取權。

遷移情境示例

以下情境示例說明兩者的遷移程序 intervalseries 資料類型:

示例 1:跑步 (間隔資料)

使用者收集了 10 年份的跑步記錄,每天跑步一小時。這個 等同於:

  • 運動時段記錄:365 * 10 * 1
  • 步數:365 * 10 * 1
  • 卡路里:365 * 10 * 1
  • 總計 = 365 * 10 * 3 (365 * 30) = 10,150

由於 1 個區塊相當於 3,000 筆記錄,因此上述資料共約有 4 個 分為多個片段

我們的內部測試確認,典型的區塊大約需要 插入秒數,因此上述資料大約會在 4 小時內遷移 秒內請求驗證碼。

示例 2:心率 (系列資料)

使用者已收集 5 年份的心率資料 (每 共計 2,628,000 筆記錄。

每個區塊有 3,000 筆記錄,資料分佈在 876 個區塊中。有 插入 1 個區塊約需一秒的時間,資料將完成遷移 都能在 15 分鐘內完成

建議遷移流程

我們決定選擇立即遷移。實際上 代表只要裝置升級至 Android 14,盡可能減少使用者介入。

讓我們來看看整體遷移流程:

  1. 使用者將裝置升級至 Android 14。
  2. Jetpack 14 會將使用者轉送至模組 API,並在 遷移作業進行中。
  3. 遷移程序會在模組版本的功能相容時開始執行 具有相同的功能,也就是模組版本包含相同的功能集;或 內容。遷移程序開始後,APK 會遷移權限 和資料
    1. 如果兩個版本的功能不相容,則模組版本會顯示 不需要升級升級完成後,遷移程序 就會開始執行
  4. 遷移作業完成後,狀態會變更為「遷移」 ,然後模組 API 已解除封鎖。
  5. 現在可以解除安裝 APK。

遷移 UI 元素

以下畫面會透過使用者說明的架構模組顯示 遷移前和遷移期間的用途:

圖 1. 如果 Health Connect APK 未處於「遷移感知」狀態,系統會顯示提示 指示使用者更新 APK。如果使用者拒絕更新, 模組會繼續運作,並開始累積權限和資料:

必須更新手機


圖 2. 如果架構模組需要更新才能成為功能 ,系統會提示使用者執行更新並 重新啟動裝置。如果使用者拒絕更新,模組會繼續執行 開始累積權限和資料:

必須更新 APK


圖 3. 遷移程序中會顯示旋轉圖示,並以文字說明當下正在同步處理資料:

資料正在同步

刪除重複的資料

如果架構模組已開始取得資料和權限 執行遷移或雲端還原「之前」,以下項目

權限

假使架構模組中有權限,任何重複項目 在遷移過程中,系統會忽略從 APK 取得的權限。

資料

在遷移期間,系統會忽略來自 APK 的重複資料,更多內容 系統會優先採用來自模組的最新資料。

如果記錄 ID 是由clientRecordId 用戶端。否則,時間間隔 (startTimeendTime 為內部) 記錄、time 用於即時記錄) 以及資料 應用程式的類型和套件名稱

Jetpack SDK 的異動

Jetpack SDK 可做為 Connect APK 和 Health Connect 架構 API。

原始設備製造商 (OEM) 可以開始與 Jetpack 13 整合, 您就能使用新程式庫並在 Android 14。

我們將會發布新版 SDK,可支援轉換至 Android 14。您必須對現有的整合,加以調整 可確保轉換作業順利進行。

權限宣告

在 Android 13 中,您可以使用自訂權限格式宣告權限。 連結至資訊清單的資源檔案:

#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>

如要支援 Android 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>

<queries>
    <package android:name="com.google.android.apps.healthdata"/>
</queries>

開啟 Health Connect

大多數第三方應用程式都提供可開啟 Health Connect 應用程式的按鈕,例如 「管理存取權」按鈕。

在 Android 13 中,您可以使用套件名稱開啟 Health Connect 應用程式,或者 透過 androidx.health.ACTION_HEALTH_CONNECT_SETTINGS 動作執行。

在 Android 14 中,您必須使用 Jetpack SDK 中指定的意圖動作。 並根據執行操作的 Android 版本而有不同的值:

@get:JvmName("getHealthConnectSettingsAction") @JvmStatic val ACTION_HEALTH_CONNECT_SETTINGS

取得 Health Connect 用戶端

我們已在 Jetpack 11 上建立名為 sdkStatus單一 API, 替換其他兩個已淘汰的 API:IsSdkSupported()isProviderAvailable()

時段記錄 API 變更

alpha10 中刪除了四個 ExerciseSession 子類型 版本:

  • ExerciseEvent
  • ExerciseLaps
  • ExerciseRepetitions
  • SwimmingStrokes
,瞭解如何調查及移除這項存取權。

ExerciseSessionRecord 一樣,SleepStage 會成為 SleepSession

ExerciseSessionRecord 子類型和 SleepSession 變更都會 。

運動時段類型更新

不再支援並改為新增下列運動時段類型 做為區隔類型。

  • 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

取代類型:

  • EXERCISE_TYPE_HIGH_INTENSITY_INTERVAL_TRAINING
  • EXERCISE_TYPE_STRENGTH_TRAINING
  • EXERCISE_TYPE_CALISTHENICS

變更記錄處理

從 APK 遷移至 Android 14 時,變更記錄不會一併遷移。

遷移完成後,您會開始收到 TOKEN_EXPIREDTOKEN_INVALID 例外狀況。您應以下列方式處理 ( 優先順序):

1. 讀取及簡化自「上次讀取」以來的所有資料或最後 30 天

儲存應用程式上次從 Health Connect 讀取資料時的時間戳記。位於權杖 到期,請重新讀取這個值或過去 30 天的資料 (等同於最小值) 並簡化先前讀取的重複資料 進一步學習如何使用 UUID

2. 讀取自「上次讀取」以來的資料timestamp [時間戳記]

建立時間戳記,指出上次從 Health Connect 讀取資料的時間 ,並在權杖到期後,讀取該值「之後」的所有資料。

3. 刪除及重新讀取過去 30 天的資料

刪除過去 30 天內從 Health Connect 讀取的所有資料,並讀取所有資料 再次進行其他活動 (例如應用程式首次與「健康」整合時的做法相同) 連線)。

4. 不執行任何動作 (例如,重新讀取過去 30 天的資料,且不刪除重複資料)

請將此方法做為最終手段,因為這有顯示潛在風險 重複的資料考量到 UUID,開發人員應改為探索選項 1 到 3 投放內容

使用 Jetpack SDK 測試 Android 14 API

Android 14 Jetpack SDK 預計將在 2023 年 6 月 7 日發布,與 Android 14 的 Beta 3 版本。您必須開始編譯應用程式 Android 14 才能使用 Android 14 Jetpack SDK。

如要針對 Android 開發人員預覽版測試解決方案 6 月 7 日前,請向 Google 聯絡窗口尋求協助。

如果您要依據 Beta 3 版本測試解決方案,則應該 下列 APK 變更:

  1. 設定 compileSDKPreview = UpsideDownCake
  2. 更新資訊清單,加入 Android 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>

原始設備製造商 (OEM) 自訂主題

在 Android 14 中,Health Connect 隱私權與資料管理控管機制的 或「系統設定」中調整設定

為了讓資料管理和權限畫面的外觀與風格類似 Health Connect 使用自訂疊加層提供原始設備製造商 (OEM) 主題設定。

如需 OEM 樣式說明文件,請參閱 Health Connect Google 行動服務 說明文件