Tag: hkhealthstore

Health与HealthKit-swift处理多个步骤源

我的Swift iOS应用程序与HealthKit连接,向用户显示当天到目前为止所采取的步骤。 大多数情况下,这是成功的。 当步骤的唯一来源是iPhone的内置计步器functionlogging的步骤时,一切工作正常,我的应用程序显示的步数与健康应用程序的步数相匹配。 但是,当我的个人iPhone上有多个数据源时,我的Pebble Time智能手表和iPhone的计步器都会向Health提供步骤 – 我的应用程序吓坏了,logging了两者的所有步骤。 鉴于iOS健康应用程序根源重复的步骤(它可以做,因为我的iPhone和我的卵石报告每隔60秒步骤健康),并显示一个准确的每日步数,我的应用程序从HealthKit获得的数据包括所有从这两个步骤来源,造成很大的不准确。 我怎样才能进入健康应用程序的最终结果,其步数是准确的,而不是进入HealthKit的过度膨胀的步骤数据stream? 更新 :这是我用来获取每日健康数据的代码: func recentSteps2(completion: (Double, NSError?) -> () ) { checkAuthorization() // checkAuthorization just makes sure user is allowing us to access their health data. let type = HKSampleType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount) // The type of data we are requesting let date = NSDate() let cal = NSCalendar(calendarIdentifier: […]

了解来自HKSourceQuery或一般来源的结果

我只是做了一个HKSourceQuery并得到了一些结果。 当我做了一个println的结果,我得到这个: <HKSource:0x156c1520 "Health" (com.apple.Health)>//description of the object 如何使用这个来做一个使用HKQuery.predicateForObjectsFromSource(/* source goes here */)的谓词HKQuery.predicateForObjectsFromSource(/* source goes here */)

HealthKit – 我们可以先问一些权限,然后再问一些吗?

我们正在开发一个健身旅程应用程序,使用HealthKit从其他一些应用程序导入到我们自己的锻炼。 大多数用户只需要授予阅读权限。 但是,将来有些人可能会希望给我们的应用程序写权限,以将我们自己的信息添加到他们的健康应用程序。 是否有可能要求在两个步骤的权限? 目标是通过要求大量的信息来压倒用户。

HealthKit数据在后台无法访问

我想在后台使用后台提取来提取HealthStore数据,但是我不断收到错误: Error Domain=com.apple.healthkit Code=6 "Protected health data is inaccessible" UserInfo=0x17026fdc0 {NSLocalizedDescription=Protected health data is inaccessible} 。 苹果说: 由于HealthKit商店已encryption,因此手机locking时,应用程序无法从商店读取数据。 这意味着您的应用在后台启动时可能无法访问商店。 任何解决方法来访问背景中的数据? HKObserverQuery是在后台获取数据的唯一方法吗?

从HealthKit监控心率 – >仅在applicationDidBecomeActive(BUG或FEATURE?)之后调用HKAnchoredObjectQuery

我正在写一个简单的应用程序来监视来自HealthKit的心率(HKQuantityTypeIdentifierHeartRate),无论何时将新的运行率值写入HealthKit。 正如在WWDC2015(会话203)中所见,我正在使用HKAnchoredObjectQuery ,它应该用于添加和删除对象。 每当我启动应用程序,我打电话给最新的对象和执行查询的HKQuery这工作正常! 但即使样本在那里,我也没有新的样本,但是如果我将应用程序带到背景中,并且再次到达前台,我将获得所有新的心率。 它是一个错误吗? 或者我应该怎么做才能监控心率,而不必将应用程序推到后台和前台呢? 这里是我使用的代码(一切都存储在AppDelegate中),我正在调用[self requestAccessDataTypes]; 来自didFinishLaunchingWithOptions : [healthStore enableBackgroundDeliveryForType:sampleType frequency:HKUpdateFrequencyImmediate withCompletion:^(BOOL success, NSError *error) {}]; HKQuery *query = [self createHeartRateStreamingQuery:datum]; if (query) { [healthStore executeQuery:query]; } else { NSLog(@"workout can not start"); } -(HKQuery*)createHeartRateStreamingQuery:(NSDate*)workoutStartDate { NSLog(@"%@ – createHeartRateStreamingQuery", [self class]); if ([HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeartRate]) { HKQuantityType *quantityType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeartRate]; HKAnchoredObjectQuery * […]

HealthKit(iOS)不会在后台传递数据(objC)

我们目前正在尝试让HealthKit在后台工作,以便在应用程序closures时将步骤数据传递到我们的服务器。 为了实验目的,我们在XCode中创build了一个全新的iOS项目,启用了HealhtKit和兼容性中的所有背景模式。 之后,我们几乎可以运行代码(详见下文)。 那么首先会发生的事情是,应用程序要求我们授予的权限。 我们期望的是,应用程序应该每隔一小时向服务器传送步骤数据。 但它不这样做,似乎应用程序无法做任何事情,当它不活跃。 应用程序只能在恢复或启动时传递数据,但完全不会从背景(软closures/硬closures) appdelegate.m: – (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [self setTypes]; return YES; } -(void) setTypes { self.healthStore = [[HKHealthStore alloc] init]; NSMutableSet* types = [[NSMutableSet alloc]init]; [types addObject:[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount]]; [self.healthStore requestAuthorizationToShareTypes: types readTypes: types completion:^(BOOL success, NSError *error) { dispatch_async(dispatch_get_main_queue(), ^{ [self observeQuantityType]; [self enableBackgroundDeliveryForQuantityType]; }); }]; } -(void)enableBackgroundDeliveryForQuantityType{ […]

心率与苹果的Healthkit

我目前在一个应用程序使用Healthkit,并没有问题获得大多数types的信息,但是心率有问题。 每次我尝试阅读一个样本时,结果都是“0”。 我有一个苹果手表,我的心率得到喂养苹果健康的应用程序,并可以在那里直观地看到它,所以这不是一个硬件问题。 我只需要显示它,不需要写回数据。 它允许我第一次运行允许访问心率,所以不应该有任何与该代码的问题,但我会发布它。 我可以find心率检测的大多数例子是在Swift中,我宁愿远离,或过时的蓝牙/相机方法。 这里是我正在使用的,它主要是从我的代码中的其他地方检索步骤,步行距离等代码复制和粘贴…所以我可能有一些在这个块不符合心率数据types,但我找不到它。 现在看起来,它会获得一天的平均心率,而不是最新的样本,这是现在罚款,只要我能看到一些types的数据被馈送到应用程序。 我无法find一个方法来轮询最新的心率样本,这导致我相信我完全使用了错误的方法,但找不到任何其他信息或样本。 我已经尝试了大约8种不同的在线示例代码/项目,其中没有一个能够产生“0”以外的任何结果(所以请不要链接到示例代码…我已经尝试了所有可用的代码…谷歌,GitHub,等等,所以任何链接可能会得到一个“我已经testing,同一个错误”的回应,哈哈)。 这是我现在使用的: 我99.9%肯定会给我的问题: – (void)queryHealthDataHeart{ HKQuantityType *typeHeart =[HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeartRate]; NSDate *now = [NSDate date]; NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar]; NSDateComponents *components = [calendar components:NSCalendarUnitYear| NSCalendarUnitMonth | NSCalendarUnitDay fromDate:now]; NSDate *beginOfDay = [calendar dateFromComponents:components]; NSPredicate *predicate = [HKQuery predicateForSamplesWithStartDate:beginOfDay endDate:now options:HKQueryOptionStrictStartDate]; HKStatisticsQuery *squery = [[HKStatisticsQuery alloc] initWithQuantityType:typeHeart […]

屏幕locking时HealthStore enableBackgroundDelivery

您好,我正在尝试安装启用后台交付的健康商店观察员。 我的问题是,屏幕locking时,它不会传递任何东西。 我已经简化了我的代码这个问题的重点:)我有我的plist HealthKit,我已经接受healthStoretypes的步数。 当应用程序打开并且屏幕未locking时,一切正常。 但是,当屏幕locking,我没有得到任何意见。 为了testing目的,频率被设置为立即。 我的代码如下 – (void)setupHealthStore{ if ([HKHealthStore isHealthDataAvailable]) { NSSet *readDataTypes = [self dataTypesToRead]; self.healthStore = [[HKHealthStore alloc]init]; [self.healthStore requestAuthorizationToShareTypes:nil readTypes:readDataTypes completion:^(BOOL success, NSError *error) { if (success) { HKQuantityType *quantityType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount]; [self.healthStore enableBackgroundDeliveryForType:quantityType frequency:HKUpdateFrequencyImmediate withCompletion:^(BOOL success, NSError *error) { if (success) { [self setupObserver]; } }]; } […]