我正在制作一个应用程序,该应用程序将在Apple Watch上记录一段时间的用户加速并将该数据发送到配对的iPhone。我正在使用CoreMotion
框架来实现这一目标。
我的问题:我一直在使用CMSensorRecorder
对象来记录数据。这工作了一段时间,但是CMSensorRecorder.authorizationStatus()
现在“未被授权”。
自开始以来,我在手表和手机应用程序的NSMotionUsageDescription
文件中都有info.plist
。我删除并重新添加了这些,没有运气。
我记得该应用程序显示提示以允许进行运动跟踪,但是无法重新创建显示提示的功能。非常感谢您提供有关如何再次启用CMSensorRecorder
的建议。干杯。
我的代码初始化CMSensorRecorder
:
if CMSensorRecorder.isAccelerometerRecordingAvailable(){
if CMSensorRecorder.authorizationStatus() == .authorized {
print("\(Date()): recorder started")
DispatchQueue.global(qos: .background).async {
DispatchQueue.global(qos: .background).sync{
self.dateStart = Date()
self.recorder.recordAccelerometer(forDuration: self.duration)
}
}
}
else {
print("\(CMSensorRecorder.authorizationStatus())")
self.xAccLabel.setText("not authorised")
}
}
else {
print ("Recording not available")
self.xAccLabel.setText("Not available")
}
答案 0 :(得分:0)
为此找到了THIS线程,对此有一个答案:
我发现
CMSensorRecorder.isAuthorizedForRecording()
返回 仅在true
和Privacy/Motion
中授权您的应用后Fitness
iPhone)。然后使该应用获得Motion
和Fitenss
的授权 必须访问核心运动功能之一(例如startActivityUpdatesToQueue
甚至recordAccelerometerForDuration
)。 之后,您只需要在iPhone上进行确认,从现在开始CMSensorRecorder.isAuthorizedForRecording()
返回true
。仍然,我无法从
CMSensorRecroding
获取任何数据。就我而言accelerometerDataFromDate
函数不返回任何数据- 返回值始终为零。因为在别处说它可以 可能需要3分钟才能使数据可用,我正在 以下情况:
我正在使用
recordAccelerometerForDuration(30)
开始重新编码会话。我在这里记录当前日期:recordingStartDate = NSDate()
。我等待的时间超过
3min30s
(使手表上的应用处于活动状态),此后,我致电:
accelerometerDataFromDate(NSDate(timeInterval: 10, sinceDate: recordingStartDate), toDate: NSDate(timeInterval: 20, sinceDate: recordingStartDate)
如您所见,我在请求的30s记录帧内制作了10s窗口。
我得到
nil
。我还尝试了更短的超时,立即访问数据,并且 甚至在打电话之前就激活了加速度计 ecordAccelerometerForDuration。没有任何帮助,我仍然没有回报 来自
accelerometerDataFromDate
。我真的很想知道你们如何从中获得任何读数 传感器记录器...
也许9月9日以后情况会好起来。
因此,对于authorization
,我尝试了startActivityUpdates
,如下所示
self.activityManager.startActivityUpdates(to: OperationQueue.main, withHandler: {(data: CMMotionActivity!) -> Void in
})
,您需要声明let activityManager = CMMotionActivityManager()
一旦用户允许,if CMSensorRecorder.authorizationStatus() == .authorized {
将是true
。