2015-08-30 65 views
3

我成功地在蘋果手錶操作系統2上實時獲取心率數據而無需進行鍛鍊。但是,當蘋果手錶屏幕關閉時,我的完成模塊不再被調用。我想繼續在線管理這些數據,並在心率過低時使手機響鈴。 也許我可以讓iPhone上的應用程序打開,也許它可以在這次鍛鍊過程中訪問healthkit數據? 你認爲這可以工作嗎?或者你有另一個想法?即使蘋果手錶屏幕關閉,也可以訪問鍛鍊數據

問候

+0

請問我們是否知道您是如何在沒有鍛鍊時間的情況下獲得心率數據的?您是否將代碼放置在手錶套件擴展或視圖控制器中? 在此先感謝。 –

+0

我在下面的答案中解釋了一切;)。 它是在iPhone應用程序(視圖控制器)我做一個HKAnchoredObjectQuery。 我創建了一個nstimer來每5秒呼叫我的請求。 iOS 9有一個錯誤,當健康iphone應用程序打開時,請求不允許您獲取最新的心率數據。在您的應用中請求這些數據之前,您需要先殺死健康原生應用。 –

+0

非常感謝您的回覆。使用HKWorkOutSession可以獲得心率嗎?哪一個更好地持續獲取心率,HKAnchoredObjectQuery或HKWorkOutSession? –

回答

3

嘿,我找到了解決辦法:

我保持iPhone應用程序在前臺有:

[UIApplication sharedApplication].idleTimerDisabled = YES 

而且比蘋果手錶(HKAnchoredObjectQuery)我可以訪問最新的醫療包數據相同的查詢。我順利拿到,即使我的蘋果手錶是關閉(與健身課程)實時心臟率數據

  • 我的查詢

    HKQuantityType *type = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeartRate]; 
    
    HKAnchoredObjectQuery *heartRateQuery = [[HKAnchoredObjectQuery alloc] 
                initWithType:type 
                predicate:nil 
                anchor:self.anchor 
                limit:HKObjectQueryNoLimit 
                resultsHandler:^(HKAnchoredObjectQuery * _Nonnull query, NSArray<__kindof HKSample *> * _Nullable sampleObjects, NSArray<HKDeletedObject *> * _Nullable deletedObjects, HKQueryAnchor * _Nullable newAnchor, NSError * _Nullable error) { 
                 if (error) { 
    
                  // Perform proper error handling here... 
                  NSLog(@"*** An error occured while performing the anchored object query. %@ ***", 
                    error.localizedDescription); 
    
                 } 
    
                 self.anchor = newAnchor; 
    
                 HKQuantitySample *sample = (HKQuantitySample *)[sampleObjects firstObject]; 
                 if (sample) { 
                  double value = [sample.quantity doubleValueForUnit:[HKUnit unitFromString:@"count/min"]]; 
    
                  dispatch_async(dispatch_get_main_queue(), ^(void){ 
                   self.heartrateLabel.text = [NSString stringWithFormat:@"%0.0f",value]; 
                  }); 
                  NSLog([NSString stringWithFormat:@"%0.0f",value]); 
                  [self.hkStore stopQuery:heartRateQuery]; 
    
    
                 } 
                }]; 
    

    [self.hkStore的executeQuery:heartRateQuery]。

+0

偉大的工作! 1+ –

+1

您多久會在iOS端獲得回調?對我來說,這只是大約每30分鐘左右...(與那時發生的所有樣本)。有什麼我可能會失蹤? – Georg

+0

@Arsene你能用這種方法實時讀取心率嗎? – Licx

0

通過設計,watchOS 2應用程序不允許運行,而觀看屏幕是關閉的。你不能改變這種行爲。

+0

好吧,這就是我的想法。 您是否認爲我可以讓iPhone應用程序保持打開狀態,並從我的iPhone(鍛鍊期間)訪問健康套件數據? –

+0

鍛鍊期間用戶的手機可能會被鎖定,並且設備密碼鎖定時HealthKit數據不可用。另請注意,手錶中的HealthKit數據僅會定期同步到手機,因此無法實時提供。 – Allan

+0

是的,但與iPhone應用程序打開和HKAnchoredObjectQuery我成功地實時獲取心率數據在我的iPhone上(即使蘋果手錶應用程序關閉)。我遇到同步問題,但是當我打電話給[self.hkStore startQuery:heartRateQuery];它工作正常,我不知道爲什麼,但它似乎強制導入數據... 更多詳細信息在我的答案;) –