You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

react-native-health-connect报错:lateinit property requestPermission未初始化

解决react-native-health-connect调用requestPermission时的初始化崩溃问题

问题重现

使用react-native-health-connect实现步行计步器功能,初始化后调用requestPermission申请权限时应用崩溃,报错:

lateinit property requestPermission has not been initialized

相关代码如下:

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';
import {useEffect, useState} from 'react';
import { Platform } from 'react-native';

const useHealthData = () => {
const [steps, setSteps] = useState(0);
const [flights, setFlights] = useState(0);
const [distance, setDistance] = useState(0);
const [androidPermissions, setAndroidPermissions] = useState<Permission[]>([]);

const init = async () => {
// initialize the client
const isInitialized = await initialize();

if (!isInitialized) {
console.log('Failed to initialize Health Connect');
return;
}

// request permissions
const grantedPermissions = await requestPermission([
{ accessType: 'read', recordType: 'Steps' },
]);

setAndroidPermissions(grantedPermissions);
};

useEffect(() => {
if (Platform.OS !== 'android') {
return;
}

init();
}, []);

return {steps, flights, distance}
}

问题原因

这个错误核心是权限请求方法未与初始化后的Health Connect客户端正确绑定,常见触发场景:

  1. API名称变更:新版本库将requestPermission改为复数形式requestPermissions,旧方法已废弃或未正确初始化;
  2. 异步时序问题:initialize返回true但内部客户端未完成初始化,就立刻调用权限请求;
  3. 版本兼容问题:低版本库存在初始化逻辑缺陷,导致方法未正确注入;
  4. 设备不支持Health Connect:未提前检查设备状态,导致初始化流程异常。

解决方案

1. 修正API调用(最常见解决方式)

将requestPermission替换为requestPermissions,同时增加设备支持性检查。

2. 完善初始化流程

用isHealthConnectAvailable提前确认设备支持Health Connect;添加try-catch捕获异常,方便排查问题。

3. 检查原生配置

确保AndroidManifest.xml添加了必要权限:

<uses-permission android:name="android.permission.health.READ_STEPS" />

并确认项目依赖的Health Connect版本与react-native-health-connect库兼容。

修正后的完整代码

import { initialize, requestPermissions, readRecords, isHealthConnectAvailable } from 'react-native-health-connect';
import { Permission } from 'react-native-health-connect/lib/typescript/types';
import { useEffect, useState } from 'react';
import { Platform } from 'react-native';

const useHealthData = () => {
  const [steps, setSteps] = useState(0);
  const [flights, setFlights] = useState(0);
  const [distance, setDistance] = useState(0);
  const [androidPermissions, setAndroidPermissions] = useState<Permission[]>([]);

  const init = async () => {
    // 检查设备是否支持Health Connect
    const isAvailable = await isHealthConnectAvailable();
    if (!isAvailable) {
      console.log('当前设备不支持Health Connect,请安装或启用该应用');
      return;
    }

    // 初始化客户端
    const isInitialized = await initialize();
    if (!isInitialized) {
      console.log('Health Connect初始化失败');
      return;
    }

    // 请求步数读取权限
    try {
      const grantedPermissions = await requestPermissions([
        { accessType: 'read', recordType: 'Steps' },
      ]);
      setAndroidPermissions(grantedPermissions);
      // 权限获取成功后可在此调用readRecords读取步数数据
    } catch (error) {
      console.error('请求权限时出错:', error);
    }
  };

  useEffect(() => {
    if (Platform.OS !== 'android') return;
    init();
  }, []);

  return { steps, flights, distance };
};

额外建议

  • 升级react-native-health-connect到最新稳定版本,规避旧版本已知bug;
  • 测试时确保设备已安装并启用Health Connect应用;
  • 权限请求失败时,引导用户前往系统设置手动开启权限。

内容的提问来源于stack exchange,提问作者Tareq A. Deeb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 05:49:56