Health Connect 將與 Android 14 封裝為通用資料儲存層 ,以獲得精細權限保護,並能 Android 系統應用程式 (本文件中統稱為「架構」 模組)。
開發人員應將 Health Connect APK (Android 13) 視為過時版本 架構模型的相容性層架構模型 功能與 APK 之前的版本完全對等。
從 Android 13 轉換至 14 時,請務必確保 盡可能提供流暢且直覺的使用者體驗。
本文件將概述遷移計畫,並提供一些遷移範例 並列出 Jetpack SDK 的變更,方便您存取 Health Connect API。
遷移計畫
- Android 14 發布後,Google 會改為提供 Health Connect 下載為 Android 系統應用程式
- 一旦功能一致,系統就會從 APK 中補充資料。
- 所有進入點都會以系統應用程式 UI 為指定目標。
- 資料遷移作業即將開始。在遷移作業進行期間, 模組 API 會暫停,並顯示「遷移中」狀態。這個 也會在 Health Connect UI 中顯示。
- 一旦遷移作業完成,即可解除安裝 APK。
遷移情境示例
以下情境示例說明兩者的遷移程序
interval
和 series
資料類型:
示例 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,盡可能減少使用者介入。
讓我們來看看整體遷移流程:
- 使用者將裝置升級至 Android 14。
- Jetpack 14 會將使用者轉送至模組 API,並在 遷移作業進行中。
- 遷移程序會在模組版本的功能相容時開始執行
具有相同的功能,也就是模組版本包含相同的功能集;或
內容。遷移程序開始後,APK 會遷移權限
和資料
- 如果兩個版本的功能不相容,則模組版本會顯示 不需要升級升級完成後,遷移程序 就會開始執行
- 遷移作業完成後,狀態會變更為「遷移」 ,然後模組 API 已解除封鎖。
- 現在可以解除安裝 APK。
遷移 UI 元素
以下畫面會透過使用者說明的架構模組顯示 遷移前和遷移期間的用途:
圖 1. 如果 Health Connect APK 未處於「遷移感知」狀態,系統會顯示提示 指示使用者更新 APK。如果使用者拒絕更新, 模組會繼續運作,並開始累積權限和資料:
圖 2. 如果架構模組需要更新才能成為功能
,系統會提示使用者執行更新並
重新啟動裝置。如果使用者拒絕更新,模組會繼續執行
開始累積權限和資料:
圖 3. 遷移程序中會顯示旋轉圖示,並以文字說明當下正在同步處理資料:
刪除重複的資料
如果架構模組已開始取得資料和權限 執行遷移或雲端還原「之前」,以下項目
權限
假使架構模組中有權限,任何重複項目 在遷移過程中,系統會忽略從 APK 取得的權限。
資料
在遷移期間,系統會忽略來自 APK 的重複資料,更多內容 系統會優先採用來自模組的最新資料。
如果記錄 ID 是由clientRecordId
用戶端。否則,時間間隔 (startTime
和 endTime
為內部)
記錄、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_EXPIRED
。
TOKEN_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 變更:
- 設定
compileSDKPreview = UpsideDownCake
。 - 更新資訊清單,加入 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 行動服務 說明文件。