0

DeviceMotion を介して加速度計、ジャイロスコープ データ、HKWorkout を介して心拍数を取得する Apple Watch 用のアプリケーションを開発しています。

アプリケーションがフォアグラウンドに留まるまで、すべてがうまく機能します。ただし、非アクティブ状態になると(ユーザーが手首を下げると)、しばらくは機能しますが、ある時点で停止します。さらに、アプリがバックグラウンドになると、新しい DeviceMotion の更新を収集するためにアプリが停止しますが、緑の LED が点灯したままなので、心拍数のオブザーバーは引き続き機能していると思います。

DeviceMotion に使用するコードは次のとおりです。

if self.motion.isDeviceMotionAvailable {
     self.motion.deviceMotionUpdateInterval = 1.0 / 100.0
     self.motion.showsDeviceMovementDisplay = true

     self.motion.startDeviceMotionUpdates(using: .xMagneticNorthZVertical, to: OperationQueue.main, withHandler: { (data, error) in
          if let d = data {
               //collecting data
          }
     }
}

心拍数に使用するコード:

let workoutConfiguration = HKWorkoutConfiguration()
workoutConfiguration.activityType = .crossTraining
workoutConfiguration.locationType = .indoor

do {
     if workoutSession == nil {
          workoutSession = try HKWorkoutSession(healthStore: HealthDataManager.sharedInstance.healthStore!, configuration: workoutConfiguration)
               workoutSession?.startActivity(with: Date())
          }
} catch {
      print("Error starting workout session: \(error.localizedDescription)")
}

HealthDataManager.sharedInstance.observeHeartRateSamples { (heartRate) -> (Void) in
      print("heart rate sample: \(heartRate)")
      self.lastHearRateSample = heartRate
}

Apple ドキュメントの状態 ( https://developer.apple.com/documentation/healthkit/workouts_and_activity_rings )から

ワークアウト セッションがアクティブな間、アプリはバックグラウンドで実行し続けることができます。これにより、アプリはユーザーを監視し、アクティビティ全体でデータを収集できます。さらに、ユーザーが時計を確認するたびにアプリが表示されるようにします。

これらの場合、アプリの動作を管理する必要はないと考えていました。しかし、何かをしなければならないようです。バックグラウンド状態 (および非アクティブ状態) で新しい DeviceMotion データを収集する最良の方法は何ですか?

4

1 に答える 1

0

ヘルス キットのワークアウトが原因で、アプリケーションがバックグラウンドで動作していたことが判明しました。しかし、あまりにも多くのリソースを使用していたため、システムがアプリを中断しました。

于 2020-04-10T10:17:58.903 に答える