Ios CMSensorRecorder未经授权,但从未提示我给予授权?
我正在制作一个应用程序,可以在Apple Watch上记录一段时间内的用户加速,并将数据发送到配对的iPhone。我正在使用Ios CMSensorRecorder未经授权,但从未提示我给予授权?,ios,swift,xcode,core-motion,watchos-5,Ios,Swift,Xcode,Core Motion,Watchos 5,我正在制作一个应用程序,可以在Apple Watch上记录一段时间内的用户加速,并将数据发送到配对的iPhone。我正在使用CoreMotion框架来实现这一点 我的问题:我一直在使用CMSensorRecorder对象来记录数据。这工作了一段时间,但CMSensorRecorder.authorizationStatus()现在为“未授权” 我从一开始就在手表和手机应用的info.plist文件中有一个NSMotionUsageDescription。我已经删除并重新添加了这些,没有运气 我记
CoreMotion
框架来实现这一点
我的问题:我一直在使用CMSensorRecorder
对象来记录数据。这工作了一段时间,但CMSensorRecorder.authorizationStatus()
现在为“未授权”
我从一开始就在手表和手机应用的info.plist
文件中有一个NSMotionUsageDescription
。我已经删除并重新添加了这些,没有运气
我记得该应用程序显示了允许运动跟踪的提示,但无法重新创建显示提示的功能。如果您能就如何再次启用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")
}
找到了线索,有一个答案是:
我发现CMSensorRecorder.isAuthorizedForRecording()
返回
true
仅在您的应用程序在隐私/运动
和健身
中获得授权后(在
iPhone)。然后授权应用程序进行运动
和Fitenss
I
必须访问一个核心运动功能(如
startActivityUpdatesToQueue
或甚至RecordAccelerometer配置
)。
之后,你只需要在iPhone上确认,从现在开始
CMSensorRecorder.isAuthorizedForRecording()
返回true
但是,我无法从CMSensorRecroding
获取任何数据。就我而言
accelerometerDataFromDate
函数不返回任何数据-
返回值始终为零。因为其他地方说它可以
数据可用需要3分钟,我正在执行
以下场景:
recordAccelerometerForDuration(30)
开始重新编码会话。在此我记录当前日期:
recordingStartDate=NSDate()
加速计数据起始日期(NSDate(时间间隔:10,sinceDate:recordingStartDate),toDate:NSDate(时间间隔:20,sinceDate:recordingStartDate)
如你所见,我在要求的30秒录制帧内制作了一个10秒窗口nil
加速计数据从日期开始
我真的很想知道你们怎么能从
传感器记录器
也许9月9日之后情况会好转
所以对于授权
我尝试了startActivityUpdates
如下所示
self.activityManager.startActivityUpdates(to: OperationQueue.main, withHandler: {(data: CMMotionActivity!) -> Void in
})
您需要声明let activityManager=CMMotionActivityManager()
一旦用户允许,如果CMSensorRecorder.authorizationStatus()==.Authorizated{
将为true
如果提示之前已显示并响应过,则您可能已关闭设置应用程序中的权限-您需要手动将其重新打开。iOS将不会再次提示用户。