2

我正在制作一个应用程序,它将在 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")
        }
4

1 回答 1

1

为此找到了这个线程,并且有一个答案说:

我发现只有在您的应用在& (在 iPhone 上)中获得授权后才会CMSensorRecorder.isAuthorizedForRecording()返回 。然后,为了使应用程序获得授权,我必须访问其中一个核心运动功能(比如 或什至)。之后,您只需要在 iPhone 上确认,然后从现在开始 退货。truePrivacy/MotionFitnessMotionFitenssstartActivityUpdatesToQueuerecordAccelerometerForDurationCMSensorRecorder.isAuthorizedForRecording()true

尽管如此,我还是无法从CMSensorRecroding. 在我的情况下,该 accelerometerDataFromDate函数不返回任何数据 - 返回值始终为零。因为在其他地方说数据可用最多需要 3 分钟,所以我正在执行以下场景:

  1. 我正在开始重新编码会话recordAccelerometerForDuration(30)。这里我记录当前日期: recordingStartDate = NSDate().

  2. 我等待超过3min30s(保持手表上的应用程序处于活动状态),在此之后我打电话:

    accelerometerDataFromDate(NSDate(timeInterval: 10, sinceDate: recordingStartDate), toDate: NSDate(timeInterval: 20, sinceDate: recordingStartDate)

    如您所见,我在请求的 30 秒记录帧内制作了一个 10 秒窗口。

  3. 我明白了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.

于 2019-04-08T04:55:52.187 回答