Уровень уверенности в вождении в iOS 11 все время низок

У меня есть приложение, которое обнаруживает вождение пользователя и выполняет некоторые внутренние процессы. После обновления iOS с iOS-10 до iOS-11 приложение перестает работать. Тем не менее, приложение прекрасно работает в iOS 10, но не работает в iOS 11.

После отладки я обнаружил, что проблема была в CMMotionActivityManager. Доверие к автомобильной активности в большинстве случаев низкое (0), даже если пользователь фактически за рулем.

Поскольку я не могу определить полное поведение вождения пользователя.

Вот пример кода, который я использую.

if CMMotionActivityManager.isActivityAvailable() {
    motion.startActivityUpdates(to: OperationQueue.current!, withHandler: {
        activityData
        in
        self.handleActivityData(activityData!)
    })
}

func handleActivityData(_ activityData: CMMotionActivity) {
    let rawConfidence = activityData.confidence.rawValue
    // Confidence = 2  -> high
    // Confidence = 0  -> low
    if rawConfidence > 0 {
        if activityData.automotive {
            drivingActivity = true
            Log.info("Activity : Automotive")
        } else {
            drivingActivity = false
            var text = "Empty"
            if activityData.walking {
                text = "Walking"
            } else if activityData.running {
                text = "Running"
            } else if activityData.stationary {
                text = "Stationary"
            } else if activityData.cycling {
                text = "Cycling"
            } else if activityData.unknown {
                text = "Unknown"
            }
        }
    }
}

Кто-нибудь сталкивается с той же проблемой?

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

0 ответов

Обработчик не является взаимоисключающим, в операции может быть несколько истинных объектов BOOL, если они не обработаны. Зарегистрируйте его и прислушайтесь к обновлениям, если активность.confidence меняет BOOL-переменные, которые нужно проверять индивидуально, чтобы определить, кто наиболее надежен.

Быстрый способ: добавьте немного логики и создайте переменную int для уверенности. При обновлении ActivityManager проверьте, есть ли что-то лучше, чем в прошлый раз, и обновите var с новой достоверностью прогнозируемой активности.

Если вы не можете заставить это работать, я могу опубликовать код для вас

Другие вопросы по тегам