首页 > 解决方案 > 使用 Swift 从记录器中读取加速度计数据

问题描述

当应用程序进入后台时,我试图在苹果应用程序的后台运行加速度计,并且我打算使用 CMSensorRecorder 记录数据。在尝试迭代结果并打印每一行时,我无法访问数据并不断出错。下面是我使用的代码。

    func runBackgroundAccelerometer() {
            let recorder = CMSensorRecorder()
            
            // record data in background
            if CMSensorRecorder.isAccelerometerRecordingAvailable() {
                print("Accelerometer available")
                self.lastRecorderAccess = Date()
                recorder.recordAccelerometer(forDuration: 5 * 60)  // Record for 5 minutes
            }
            
        // METHOD 1
//        let list = recorder.accelerometerData(from: Date(timeIntervalSinceNow: -60), to: Date())
//        for row in list {
//            print(row)
//        }

        // METHOD 2
        if let list = recorder.accelerometerData(from: Date(timeIntervalSinceNow: -60), to: Date()) {
            for data in list{
                if let accData = data as? CMRecordedAccelerometerData{
                    let accX = accData.acceleration.x
                    let timestamp = accData.startDate
                    print(accX)
                    print(timestamp)
                }
            }
        }
    }

使用方法一打印数据会报错:

For-in 循环需要“CMSensorDataList?” 符合“顺序”;你的意思是解开可选的吗?

并使用方法 2 打印数据结果:

For-in 循环要求 'CMSensorDataList' 符合 'Sequence'

我在网上找到的示例目前不适用于最新的 swift 版本。我是 Swift 的新手,任何帮助都将不胜感激。

标签: iosswiftiphoneaccelerometer

解决方案


推荐阅读