uni-app 获取ios和安卓健康数据的原生插件

发布于 1周前 作者 songsunli 来自 Uni-App

uni-app 获取ios和安卓健康数据的原生插件

获取ios 健康数据 和安卓健康数据的原生插件

4 回复

专业两端插件开发 Q 1196097915


承接双端(Android,iOS)原生插件开发,uni-app开发,出售各类型源码。欢迎咨询
QQ:1559653449 V X:fan-rising

查询健康数据、步数、骑车距离、心率、身高、体重等等(ios) :https://ext.dcloud.net.cn/plugin?id=10728

在uni-app中,由于它主要面向跨平台开发,直接获取iOS和Android健康数据(如步数、心率等)的原生功能需要借助原生插件。以下是一个简要的实现思路和代码案例,展示如何通过原生插件获取健康数据。

思路

  1. 创建原生插件:为iOS和Android分别编写原生代码,用于获取健康数据。
  2. 集成插件到uni-app:将原生插件集成到uni-app项目中。
  3. 调用插件方法:在uni-app中使用JavaScript调用原生插件的方法获取健康数据。

示例代码

iOS原生插件

创建一个Objective-C或Swift类,使用HealthKit框架获取健康数据。

// MyHealthPlugin.h
#import <Foundation/Foundation.h>

@interface MyHealthPlugin : NSObject

- (void)getStepCountWithResult:(void (^)(NSNumber *stepCount, NSError *error))result;

@end

// MyHealthPlugin.m
#import "MyHealthPlugin.h"
#import <HealthKit/HealthKit.h>

@interface MyHealthPlugin () <HKHealthStoreDelegate>
@property (nonatomic, strong) HKHealthStore *healthStore;
@end

@implementation MyHealthPlugin

- (instancetype)init {
    self = [super init];
    if (self) {
        self.healthStore = [[HKHealthStore alloc] init];
    }
    return self;
}

- (void)getStepCountWithResult:(void (^)(NSNumber *stepCount, NSError *error))result {
    [self.healthStore requestAuthorizationToShareTypes:nil readTypes:[NSSet setWithObject:[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount]] completion:^(BOOL success, NSError *error) {
        if (success) {
            NSDate *startDate = [NSDate dateWithTimeIntervalSinceNow:-24*60*60]; // 24 hours ago
            NSPredicate *predicate = [HKQuery predicateForSamplesWithStartDate:startDate endDate:[NSDate date] options:HKQueryOptionStrictStartDate];
            [self.healthStore queryQuantityType:[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount] predicate:predicate completion:^(HKQuantitySampleQuery *query, NSArray<HKSample *> *results, NSError *error) {
                if (!error && results.count > 0) {
                    HKQuantitySample *sample = results.firstObject;
                    HKQuantity *quantity = sample.quantity;
                    result(quantity.doubleValue, nil);
                } else {
                    result(nil, error);
                }
            }];
        } else {
            result(nil, error);
        }
    }];
}

@end

Android原生插件

使用Google Fit API获取健康数据。

由于篇幅限制,这里只展示iOS部分,Android部分类似,需要创建一个Java或Kotlin类,使用Google Fit API获取数据,并通过接口回调将结果返回给uni-app。

集成到uni-app

  1. 创建uni-app插件:根据uni-app插件开发文档,将原生代码打包成插件。
  2. 在uni-app中引用插件:在manifest.json中配置插件。
  3. 调用插件方法
// 在uni-app的JavaScript代码中调用插件方法
if (uni.getSystemInfoSync().platform === 'ios') {
    const myHealthPlugin = uni.requireNativePlugin('MyHealthPlugin');
    myHealthPlugin.getStepCountWithResult((stepCount, error) => {
        if (error) {
            console.error('Failed to get step count:', error);
        } else {
            console.log('Step count:', stepCount);
        }
    });
}

请根据实际需求和平台规范调整代码。

回到顶部