CMSensorRecorder未获得授权,但从未提示我进行授权吗?

时间:2019-04-08 04:29:17

标签: ios swift xcode core-motion watch-os-5

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

1 个答案:

答案 0 :(得分:0)

为此找到了THIS线程,对此有一个答案:

  

我发现CMSensorRecorder.isAuthorizedForRecording()返回   仅在truePrivacy/Motion中授权您的应用后Fitness   iPhone)。然后使该应用获得MotionFitenss的授权   必须访问核心运动功能之一(例如   startActivityUpdatesToQueue甚至recordAccelerometerForDuration)。   之后,您只需要在iPhone上进行确认,从现在开始   CMSensorRecorder.isAuthorizedForRecording()返回true

     

仍然,我无法从CMSensorRecroding获取任何数据。就我而言   accelerometerDataFromDate函数不返回任何数据-   返回值始终为零。因为在别处说它可以   可能需要3分钟才能使数据可用,我正在   以下情况:

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

  2.   
  3. 我等待的时间超过3min30s(使手表上的应用处于活动状态),此后,我致电:

         

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

         

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

  4.   
  5. 我得到nil

  6.   
     

我还尝试了更短的超时,立即访问数据,并且   甚至在打电话之前就激活了加速度计   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