iOS获取手机健康步数,去除人为添加的数据

热门标签

特别声明:文章多为网络转载,资源使用一般不提供任何帮助,特殊资源除外,如有侵权请联系!

#pragma mark - 获取步数从HealthKit
- (void)getstepCountFromHealthKit
{
    HKQuantityType *type = self.items[5];
       //这个函数是获取苹果健康里面的全部步数包括人为添加的
    [self fetchQuantity:typecompletionHandler:^(NSArray *result,NSError *error) {
        dispatch_async(dispatch_get_main_queue(), ^{
            if (error)
            {
                //从苹果健康获取步数失败
                NSLog(@"error:%@",error);
                [PersonInfo sharePersonInfo].isAllow = NO;
            }
            else if ([resultcount] == 0)
            {
                //没有步数
                [PersonInfo sharePersonInfo].isAllow = YES;
            }
            // succeeded to retrieve the health data
            else
            {
                [PersonInfo sharePersonInfo].isAllow = YES;
                            //这个函数是去除人为添加的,留下系统记录的步数
                NSArray *array = [selfgetRealHealthData:result];
                
                //统计数组里面的步数
                NSInteger allArrStepCount = 0;
                //一个数组的添加
                for (NSDictionary *dictin array)
                {
                    NSInteger stepCount = [dict[@"stepCount"]integerValue];
                    allArrStepCount = allArrStepCount + stepCount;
                    NSString *dateTime = dict[@"dateTime"];
                    [_dateTimeArr addObject:dateTime];
                }
                
                NSString *value = [NSStringstringWithFormat:@"%ld",(long)allArrStepCount];
                
                [selfsetStepCountAboutDataBase:value locationCount:1getArr:array];
            }
          });
      }];
}
 
 
#pragma mark - 从健康中获取真实数据 --去除人为添加的
- (NSArray *)getRealHealthData:(NSArray *)resultArr
{
    NSMutableArray *returnArr = [[NSMutableArrayalloc]init];
    HKQuantityType *stepType = [HKObjectTypequantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];
    for (HKQuantitySample *modelin resultArr)
    {
        //HKQuantity 类存储了给定单位的值,此值和单位就构成了数据。和 HKUnit类一样,在使用它时,需要进行实例化。实例化 HKQuantity需要使用到 init(unit:doubleValue:)方法。它可以用来创建一个 quantity(数量)对象。
        HKQuantity *resultQuantity = model.quantity;
        HKUnit *unit = [TTMHealthKitHelperdefaultUnitForQuantityType:stepType];
        double valueDou = [resultQuantity doubleValueForUnit:unit];
        NSString *value = [NSStringstringWithFormat:@"%.0f",valueDou];
 
        //NSString *startDateStr = [RequestHelper getDateStrFromDate:model.startDate];
        NSString *endDateStr   = [RequestHelpergetDateStrFromDate:model.endDate];
        
        NSDictionary *dict = (NSDictionary *)model.metadata;
        NSInteger wasUserEntered = [dict[@"HKWasUserEntered"]integerValue];
        
        if(wasUserEntered == 1)
        {
           //这是用户自己手动添加的数据
            //NSLog(@"value == %@",value);
        }
        else
        {
    //这是苹果HealthKit记录的数据
            NSDictionary *dictReturn = @{@"dateTime":endDateStr,@"stepCount":value};
            [returnArr addObject:dictReturn];
        }
    }
    return returnArr;
}

 

标签:

未经允许不得转载:作者:SheaYang, 转载或复制请以 超链接形式 并注明出处 技术Dog|博客
原文地址:《iOS获取手机健康步数,去除人为添加的数据》 发布于2019-11-02

分享到:
赞(0) 打赏

评论 抢沙发

5 + 1 =


iOS获取手机健康步数,去除人为添加的数据

长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.0主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?