Ответ 1
Нет. Прямой доступ к датчикам Apple Watch (включая акселерометр) невозможен.
Как всегда, если это то, что вы хотели бы, пожалуйста, напишите запрос на него https://bugreport.apple.com.
Не похоже, что у WatchKit сегодня есть такой API.
Нет. Прямой доступ к датчикам Apple Watch (включая акселерометр) невозможен.
Как всегда, если это то, что вы хотели бы, пожалуйста, напишите запрос на него https://bugreport.apple.com.
Информация о данных датчика теперь доступна в Watchkit for watchOS 2.0
.
Вы можете проверить эту информацию в следующем сеансе, который представляет собой итоговую 30-минутную презентацию. Если вы не хотите просматривать весь сеанс, вы сразу переходите к функциям CoreMotion
и HealthKit
, которые находятся между 22-28 мин:
WatchKit для сессии watchOS 2.0 в WWDC 2015
Внедрение частоты сердечных сокращений
https://developer.apple.com/documentation/healthkit/hkworkout
Реализация акселерометра
Вот реализация акселерометра в WatchKit Extension, вот ссылка:
import WatchKit
import Foundation
import CoreMotion
class InterfaceController: WKInterfaceController {
@IBOutlet weak var labelX: WKInterfaceLabel!
@IBOutlet weak var labelY: WKInterfaceLabel!
@IBOutlet weak var labelZ: WKInterfaceLabel!
let motionManager = CMMotionManager()
override func awakeWithContext(context: AnyObject?) {
super.awakeWithContext(context)
motionManager.accelerometerUpdateInterval = 0.1
}
override func willActivate() {
super.willActivate()
if (motionManager.accelerometerAvailable == true) {
let handler:CMAccelerometerHandler = {(data: CMAccelerometerData?, error: NSError?) -> Void in
self.labelX.setText(String(format: "%.2f", data!.acceleration.x))
self.labelY.setText(String(format: "%.2f", data!.acceleration.y))
self.labelZ.setText(String(format: "%.2f", data!.acceleration.z))
}
motionManager.startAccelerometerUpdatesToQueue(NSOperationQueue.currentQueue()!, withHandler: handler)
}
else {
self.labelX.setText("not available")
self.labelY.setText("not available")
self.labelZ.setText("not available")
}
}
override func didDeactivate() {
super.didDeactivate()
motionManager.stopAccelerometerUpdates()
}
}
Мы получим это, скорее всего, в следующем году, когда Apple позволит нам создавать полноценные приложения. До сих пор это только UI, взгляды и уведомления.
Обновить. Apple теперь предоставила API-интерфейсы разработчика. Проверьте ответы кайзеров.
Обновление для watchOS 4 и iOS 11: Теперь доступны данные гироскопа (скорость вращения), и все данные датчиков из часов можно получить через обновленный CoreMotion.
Более конкретно CMDeviceMotion получает вас:
Реализация акселерометра с CMDeviceMotion
:
class InterfaceController: WKInterfaceController {
let motionManager = CMMotionManager()
override func awake(withContext context: Any?) {
super.awake(withContext: context)
motionManager.deviceMotionUpdateInterval = 0.1
}
override func willActivate() {
super.willActivate()
if motionManager.isDeviceMotionAvailable {
let coreMotionHandler : CMDeviceMotionHandler = {(data: CMDeviceMotion?, error: Error?) -> Void in
// do something with data!.userAcceleration
// data!. can be used to access all the other properties mentioned above. Have a look in Xcode for the suggested variables or follow the link to CMDeviceMotion I have provided
}
motionManager.startDeviceMotionUpdates(to: OperationQueue.current!, withHandler: coreMotionHandler)
} else {
//notify user that no data is available
}
}
override func didDeactivate() {
super.didDeactivate()
motionManager.stopDeviceMotionUpdates()
}
}
Примечания по реализации выше:
Хотя этот метод позволит вам получить от A до B с точки зрения получения некоторых данных в реальном времени от Apple Watch, в этом официальный учебник Apple, в котором объясняется, как отделить логику датчика от InterfaceController в отдельной модели и т.д. - чрезвычайно полезно, на мой взгляд.