CMSensorRecorder未经授权,但我从未被提示授权?

问题描述 投票:2回答:1

我正在创建一个应用程序,它将在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")
        }
ios swift xcode core-motion watch-os-5
1个回答
0
投票

找到THIS线程,并有一个答案,说:

我发现CMSensorRecorder.isAuthorizedForRecording()只有在你的应用程序被授权在truePrivacy/Motion(在iPhone上)后才会返回Fitness。然后,为了使应用程序授权MotionFitenss我必须访问其中一个核心运动功能(如startActivityUpdatesToQueue甚至recordAccelerometerForDuration)。在那之后你只需要在iPhone上确认,从现在起CMSensorRecorder.isAuthorizedForRecording()返回true

不过,我无法从CMSensorRecroding获得任何数据。在我的情况下,accelerometerDataFromDate函数不返回任何数据 - 返回的值始终为nil。因为在其他地方说它可能需要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

© www.soinside.com 2019 - 2024. All rights reserved.