Я создаю приложение React Native с Health Connect для анализа некоторых основных данных о состоянии здоровья (шаги, расстояние, пройденные этажи).
initialize() работает нормально, разрешения предоставляются, но readRecords() возвращает пустой массив.< /p> app.json
В разделе «Данные и доступ» в настройках Health Connect на моем телефоне отображается сообщение «Нет данных».
Кажется, Samsung Health работает нормально.
У меня Samsung A52 с Android 14.
Начиная с Android 14 (уровень API 34), Health Connect является частью Android Framework. Т.е. дополнительная настройка (например, установка приложения Health Connect) не требуется.
Есть идеи, как решить эту проблему? Возможно, это конфигурация на стороне телефона?
Я создаю приложение React Native с Health Connect для анализа некоторых основных данных о состоянии здоровья (шаги, расстояние, пройденные этажи). initialize() работает нормально, разрешения предоставляются, но readRecords() возвращает пустой массив.< /p> [b]app.json[/b] [code]"android": { "permissions": [ "android.permission.health.READ_STEPS", "android.permission.health.READ_DISTANCE", "android.permission.health.READ_FLOORS_CLIMBED" ], ... } [/code] В разделе «Данные и доступ» в настройках Health Connect на моем телефоне отображается сообщение «Нет данных». Кажется, Samsung Health работает нормально. У меня Samsung A52 с Android 14. Начиная с Android 14 (уровень API 34), Health Connect является частью Android Framework. Т.е. дополнительная настройка (например, установка приложения Health Connect) не требуется. Есть идеи, как решить эту проблему? Возможно, это конфигурация на стороне телефона? [img]https://i.sstatic.net/LvSfwtdr.png[/img]
[b]useHealthData.ts[/b] [code]// // Custom hook to handle integration with Health Connect (Android). //
import { Platform } from 'react-native'; import { useState, useEffect } from 'react';
// library to integrate with Google's Health Connect API. import { initialize, requestPermission, readRecords } from 'react-native-health-connect'; import { Permission } from 'react-native-health-connect/lib/typescript/types'; import { TimeRangeFilter } from 'react-native-health-connect/lib/typescript/types/base.types';
// helper function to check if we have specific permission. const hasAndroidPermission = (recordType: string) => { return androidPermissions.some((perm) => perm.recordType === recordType); };
// initialize Health Connect. useEffect(() => { // check if the app is running on Android. if (Platform.OS !== 'android') { return; }
// we save the permissions in state, to be able to check later what data we have access to. setAndroidPermissions(grantedPermissions); };
initializeHealthConnect(); }, []);
const getHealthData = async () => { // check if we have the required permissions. if ( !hasAndroidPermission('Steps') || !hasAndroidPermission('Distance') || !hasAndroidPermission('FloorsClimbed') ) { console.log('Error getting permissions'); return; }
// to read data from health connect, we have to send the filter. // for the filter, we create a time range filter for the last 24 hours. const timeRangeFilter: TimeRangeFilter = { operator: 'between', startTime: new Date(date.setHours(0, 0, 0, 0)).toISOString(), // setHours(0, 0, 0, 0) to set the time to 00:00 endTime: new Date(date.setHours(23, 59, 59, 999)).toISOString(), };
// Steps const stepsRecords = await readRecords('Steps', { timeRangeFilter }); // read the Steps records. console.log(stepsRecords); const totalSteps = stepsRecords.records.reduce((sum, cur) => sum + cur.count, 0); // calculate total number of steps. setSteps(totalSteps);