Как получить частоту сердечных сокращений в watchOS 3+ без использования тренировки - PullRequest
1 голос
/ 20 мая 2019

Я бы хотел программно измерять частоту сердечных сокращений по расширению watchkit, но не во время тренировки.

Насколько я знаю, watchOS 3+ не измеряет частоту сердечных сокращений, когда пользователь движется: однако, как только он некоторое время отдыхает (10 минут?), Я бы хотел как-то получить текущий уд / мин.значение API HealthKit.

1 Ответ

0 голосов
/ 01 июня 2019

Поскольку у вас есть приложение для iPhone, вы можете запросить обновления пульса оттуда.

  • Вам просто нужно иметь iPhone с парными часами Apple (что очевидно)
  • Приложение монитора пульса Apple Watch по умолчанию обновляет данные HealthKit немедленно, только когда оно находится на переднем плане.
  • Когда приложение монитора пульса Apple Watch по умолчанию находится в фоновом режиме, оно обновляет HealthKitданные с интервалом 9-10 мин.Этот код должен выполнить работу:

    import UIKit
    import HealthKit
    
    class ViewController: UIViewController {
    @IBOutlet weak var heartRateLabel: UILabel!
    @IBOutlet weak var timeStampLabel: UILabel!
    
    var hkStore: HKHealthStore?
    let heartRateUnit: HKUnit = HKUnit.count().unitDivided(by: .minute())
    var healthStore: HKHealthStore?
    override func viewDidLoad() {
        super.viewDidLoad()
        healthStore = HKHealthStore()
        let sampleTypes = HKSampleType.quantityType(forIdentifier: HKQuantityTypeIdentifier.heartRate)!
    
        healthStore?.requestAuthorization(toShare: [sampleTypes], read: [sampleTypes], completion: { (success, error) in
            if (error != nil) {
                print(error!.localizedDescription)
            }
        })
    
        getSamples()
    }
    func getSamples() {
        let heartrate = HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.heartRate)
        let sort = [
            NSSortDescriptor(key: HKSampleSortIdentifierStartDate, ascending: false)
        ]
        let sampleQuery = HKSampleQuery(sampleType: heartrate!, predicate: nil, limit: 1, sortDescriptors: sort, resultsHandler: { [unowned self] (query, results, error) in
            if let results = results as? [HKQuantitySample]
            {
                let sample = results[0] as HKQuantitySample
                let value = sample.quantity.doubleValue(for: self.heartRateUnit)
                let rate = results[0]
                print(value, rate)
                self.updateHeartRate(samples: results)
            }
        })
        healthStore?.execute(sampleQuery)
    }
    
    func updateHeartRate(samples: [HKSample]?) {
        guard let heartRateSamples = samples as? [HKQuantitySample] else {return}
        DispatchQueue.main.async {
            guard let sample = heartRateSamples.first else{return}
            let value = sample.quantity.doubleValue(for: self.heartRateUnit)
            self.heartRateLabel.text = String(UInt16(value))
            let date = sample.startDate
            let dateFormatter = DateFormatter()
            dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss"
            self.timeStampLabel.text = dateFormatter.string(from: date)
         }
     }
    }
    

Обратите внимание, что запрос должен периодически запускаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...