Проверьте авторизацию CMMotionActivityManager ниже iOS 11 - PullRequest
0 голосов
/ 21 декабря 2018

Я написал этот код, который проверяет статус авторизации CMMotionActivityManager и позволяет ли пользователь моему приложению получать к нему доступ.

Вскоре я обнаружил, что этот код действительно работает, но только после iOS 11. Как вы можете видеть, я оставил оператор else для запасного кода для версий до iOS 11. Кто-нибудь знает, как я могу добитьсятот же процесс для версий ниже iOS 11, а затем использовать эту функциональность в операторе else?Я не могу найти много онлайн.

   private func checkAuthorizationStatus() {
        if #available(iOS 11.0, *) {
            switch CMMotionActivityManager.authorizationStatus() {
            case CMAuthorizationStatus.denied:
                onStop()
                // no authorization
            default:break
            }
        } else {
            // Fallback code for < iOS 11
        }
    }

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 21 декабря 2018

Невозможно проверить статус авторизации в версиях iOS ниже iOS 11.

Для iOS 10 и менее вы можете просто запросить действия.Если приложение не авторизовано для извлечения сохраненных данных движения, вы получите конкретную ошибку, которую вы можете проверить:

// get last 10 days of activity
let endDate = Date()
let startDate = endDate.addingTimeInterval(-60 * 60 * 24 * 10)
let manager = CMMotionActivityManager()
manager.queryActivityStarting(from: startDate, to: endDate, to: .main) { (activities, error) in
    if let error = error, (error as NSError).code == CMErrorMotionActivityNotAuthorized.rawValue {
        // not autorized!
        return
    }
    // do something with the activities
}
...