watchOS2 — CMSensorRecorder

Я хочу использовать исторические данные акселерометра из Apple Watch, и мой список accDataList всегда равен нулю. Я создал экземпляр CMSensorRecorder в функции инициализации класса. У кого-то была эта проблема раньше?

func startMovementDetection(){
    self.cmSensorRecorder?.recordAccelerometerFor(self.recorderDuration)
    self.startDate = NSDate()
}

func extractHistoricalAccelerometerData(){
    var accDataList = self.cmSensorRecorder!.accelerometerDataFrom(self.startDate, to: NSDate())
    NSLog("AccDataList : \(accDataList)")
    if accDataList != nil {
        accDataList = accDataList as CMSensorDataList
        for accData in accDataList {
            self.addHistoricalAccDataToMovementArray((accData as? CMRecordedAccelerometerData)?.acceleration)
        }
        self.sendDataToIphone()
    }        
}

Лог выглядит так:

2015-07-11 22:02:55.279 Расширение emmoveDataWatchOS[2158:2428612] Начать запись

2015-07-11 22:02:55.279 Расширение emmoveDataWatchOS [2158:2428612] AW: запуск обновлений Motion

2015-07-11 22:02:55.279 Расширение emmoveDataWatchOS [2158:2428612] AW EMWatchManager: startMovementDetection

2015-07-11 22:02:55.279 Расширение emmoveDataWatchOS [2158:2428612] Дополнительно (CMSensorRecorder: 0x797733d0)

2015-07-11 22:10:51.483 Расширение emmoveDataWatchOS [2158:2428612] AW: обновления покадровой анимации

2015-07-11 22:10:51.484 расширение emmoveDataWatchOS [2158:2428612] Извлечение данных из опционального (2015-07-11 20:02:55 +0000) в 2015-07-11 20:10:51 +0000

2015-07-11 22:10:51.484 Расширение emmoveDataWatchOS [2158:2428612] Дополнительно (CMSensorRecorder: 0x797733d0)

2015-07-11 22:10:51.486 Расширение emmoveDataWatchOS [2158:2428612] AccDataList: ноль


person Narsail    schedule 02.07.2015    source источник
comment
Вы проводите отладку на устройстве или симуляторе?   -  person Philip    schedule 03.07.2015
comment
Пробовал оба, разницы нет.   -  person Narsail    schedule 04.07.2015
comment
Как долго вы ждете между вызовом записи и опросом данных? Я обнаружил, что данные доступны только через несколько минут после начала записи.   -  person Redoubts    schedule 06.07.2015
comment
Хорошо, я проверил это с прибл. 4 мин. Попробую с большим зазором.   -  person Narsail    schedule 07.07.2015
comment
Я пробовал с 13 мин. Это было снова ноль -.-   -  person Narsail    schedule 07.07.2015


Ответы (4)


Может быть, вы можете попробовать

func startMovementDetection(){
    self.startDate = NSDate()
    self.cmSensorRecorder?.recordAccelerometerFor(self.recorderDuration)
}

И взгляните на Swift watchOS 2 - CMSensorDataList

person Marcus Vinicius Kuquert    schedule 17.08.2015
comment
В конце концов, с новыми бета-версиями Xcode и iOS эта функция теперь работает. Спасибо за вашу помощь! - person Narsail; 04.09.2015

у CMSensorRecorder также есть ошибка: вы должны подождать от 3 до 5 минут, чтобы перезапустить рекордер, иначе список всегда будет возвращать nil (вы можете посмотреть видео Apple для более подробной информации).

person Cassie Xia    schedule 14.05.2016

У меня была такая же проблема, нашел решение в этом посте:

https://forums.developer.apple.com/thread/15470

«Видимо, ему не нравится, когда зарядное устройство подключено к часам при запуске перезаписи»

Просто нужно отключить устройство от зарядного устройства. Имеет смысл, но, конечно, официально нигде не задокументировано...

person Tamir    schedule 31.05.2016

Убедитесь, что «Настройки» > «Конфиденциальность» > «Движение и фитнес» > «Отслеживание фитнеса» включены.

Если он отключен, CMSensorRecorder.accelerometerData() всегда возвращает ноль, хотя

CMSensorRecorder.isAccelerometerRecordingAvailable() == true

и

CMSensorRecorder.authorizationStatus() == .authorized

person quark    schedule 25.07.2020