我想知道我是否可以创建一个苹果手表应用程序,它会将持续的实时加速度计数据发送给我的iPhone应用程序很长一段时间(例如30分钟)。我知道如何在Apple Watch应用程序处于活动状态时读取加速度数据,但如何在应用程序未处于活动状态时(在后台)读取和发送此数据?
由于
答案 0 :(得分:1)
在watchOS 2
中,WatchConnectivity
框架可用于在Watch
和iPhone
应用之间发送数据。当您的配套iPhone应用程序处于活动状态时,您可以选择发送数据,也可以在后台发送数据。
有关watchConnectivity的更多信息,请查看此视频。 https://developer.apple.com/videos/play/wwdc2015-713/
答案 1 :(得分:0)
使用HKWorkouSession确保您的应用程序仍然在屏幕锁定或后台运行。
在后台运行 锻炼课程还允许您的应用继续在后台运行。后台执行授予应用程序以下功能: 该应用程序在整个锻炼过程中继续运行,即使用户降低手腕或与不同的应用程序进行交互。当用户抬起手腕时,应用程序会重新出现,让用户可以快速轻松地检查他们当前的进度和性能。 该应用程序可以在后台继续从Apple Watch的传感器访问数据,让您始终保持应用程序的最新状态。例如,正在运行的应用程序可以继续跟踪用户的心率,确保每当用户抬起手腕时显示最新的心率数据。 该应用程序可以在后台运行时使用音频或触觉反馈提醒用户。 参考:HKWorkouSession
以下来自Apple的SwingWatch演示的代码示例:
// MARK: Properties
let motionManager = MotionManager()
let healthStore = HKHealthStore()
weak var delegate: WorkoutManagerDelegate?
var session: HKWorkoutSession?
// MARK: Initialization
init() {
motionManager.delegate = self
}
// MARK: WorkoutManager
func startWorkout() {
// If we have already started the workout, then do nothing.
if (session != nil) {
return
}
// Configure the workout session.
let workoutConfiguration = HKWorkoutConfiguration()
workoutConfiguration.activityType = .tennis
workoutConfiguration.locationType = .outdoor
do {
session = try HKWorkoutSession(configuration: workoutConfiguration)
} catch {
fatalError("Unable to create the workout session!")
}
// Start the workout session and device motion updates.
healthStore.start(session!)
motionManager.startUpdates()
}
func stopWorkout() {
// If we have already stopped the workout, then do nothing.
if (session == nil) {
return
}
// Stop the device motion updates and workout session.
motionManager.stopUpdates()
healthStore.end(session!)
// Clear the workout session.
session = nil
}