2015-12-22 19 views
2

我正在使用CMMotionManager和HKWorkoutSession來處理Apple Watch應用程序以獲得加速度計和心率數據。該應用可以在短時間內(70秒)正常工作,但是當屏幕關閉時,心率和加速計數據都會停止。當在watchOS中關閉屏幕時沒有獲取加速度計和心率數據

我的問題是如何從加速度計和心率傳感器獲取5分鐘的數據?

+0

您是否正在啓動HKWorkoutSession?這是在屏幕熄滅時繼續收集數據的唯一方法。 – mcclux

回答

4

要花更多的時間,當應用程序要後臺可以使用performExpiringActivityWithReason。這是這裏https://developer.apple.com/videos/play/wwdc2015-228/描述我的手錶,它只是需要大約30秒

NSProcessInfo.processInfo().performExpiringActivityWithReason("Reason") { expired in if !expired { let delay: Int64 = 30 let delayTime = dispatch_time(DISPATCH_TIME_NOW, delay * Int64(NSEC_PER_SEC)) dispatch_semaphore_wait(semaphore, delayTime) } else { dispatch_semaphore_signal(semaphore) } }

+0

這是一種破解,根本不是一個可行的解決方案,你只需要多加幾秒鐘,然後系統就會終止進程。 – BootMaker

1

watchOS 2不允許應用程序運行,而屏幕是關閉的。雖然有多種方法可以獲得額外的時間,但如果使用performExpiringActivityWithReason,則無法確保您的應用程序運行整整5分鐘。

+0

RunKeeper如何在不存在電話的情況下跟蹤運行?必須有方法確保長時間的位置和心率監測。 – jjatie

+1

使用HealthKit中的HKWorkoutSession類。 HealthKit將繼續代表您的應用收集數據,即使您的應用沒有運行。當您的應用程序確實有機會運行時,HealthKit會將已累積的數據提供給您的應用程序的活動查詢。 – Allan

2

自從watchOS 2發佈以來,HKWorkoutSession是在手錶屏幕熄滅時保持應用程序運行的唯一方法。但是,該應用程序處於暫停狀態。定時器和任何其他進程的執行都會暫停,直到屏幕重新打開。但是應用程序的內存分配被保留。在應用程序暫停期間,該設備的硬件仍在收集數據並將其存儲在手錶的硬盤驅動器上。當屏幕返回時,應用程序退出暫停狀態,並且硬件收集的任何數據都會在該位置返回給應用程序(假設已經訂閱了適當的監聽程序)。

目前沒有辦法在屏幕關閉後繼續將手錶的心率數據(或任何數據)發送到iPhone。

+0

這是正確的答案。即使CMSensorRecorder可以在背景中收集數據,但延遲時間有些延遲,這是作爲實時數據收集不可接受的問題。實際上,這個和其他一些限制是AppleWatch是Job時代之後第一個也是最大的失敗之一。 – BootMaker

1

現在,Apple開放一個API來記錄您的Accel數據點擊:CMSensorRecorder 。每當您的應用程序被暫停或殺死時,API將在3天內以50Hz持續運行。

+0

這不是實時的,需要大約3分鐘的時間才能獲取數據。 – BootMaker

+1

watchOS 3.0已經改進了,所以只有幾秒鐘的延遲。 3分鐘延遲適用於watchOS 2.0。 – brunobowden

+0

@brunobowden即使你在理論上也是如此,因爲這是watchOS 3的正式通信延遲(我之前在watchOS 3之前寫過),我們在設備上的工作應用程序中永遠無法達到類似的短時間延遲。 – BootMaker

相關問題