HKWorkoutSession не держит приложение перед Apple Watch

Было заявлено, что приложение, работающее с HKWorkoutSession, будет иметь особые привилегии по сравнению с другими приложениями watchOS 2, поэтому, когда пользователь смотрит на свои Apple Watch, он переходит к представлению, показывающему выполнение тренировки, а не к циферблату.

В настоящее время как на моем устройстве, так и на симуляторе это не так. Если я запускаю HKWorkoutSession, затем оставляю на 5 минут, а затем взаимодействую либо с Apple Watch, либо с Watch Simulator, он отображает циферблат.

Если я затем открою свое приложение, оно будет заморожено, а не завершено (что, как я предполагаю, происходит с другими приложениями). Поскольку пользовательский интерфейс будет обновляться, когда мне нужно будет получить ответ в моем query.updateHandler. Кроме того, если я настрою его на предоставление тактильной обратной связи каждый раз, когда мой query.updateHandler получает новый HKQuantitySample, он будет делать это, поэтому приложение должно работать в фоновом режиме в той или иной форме.

Кто-нибудь еще замечал такое поведение, и я делаю что-то не так или ожидаю чего-то, чего не должен?

Вот как я начинаю свою HKWorkoutSession:

    self.workoutSession = HKWorkoutSession(activityType: HKWorkoutActivityType.Other, locationType: HKWorkoutSessionLocationType.Indoor)

        self.healthStore.startWorkoutSession(self.workoutSession) {
            success, error in

            if error != nil {
                print("startWorkoutSession \(error)\n")
                self.printLabel.setText("startWorkoutSession \(error)")
                self.printLabel.setTextColor(UIColor.redColor())
            }

person William Robinson    schedule 04.07.2015    source источник
comment
После дальнейшего изучения я решил, что мой код продолжает работать в фоновом режиме и что мне следует иметь код для обновления пользовательского интерфейса на willActivate, а не ждать нового запроса. Я оставлю это открытым немного дольше, потому что нет однозначного ответа, почему приложение не остается на переднем плане.   -  person William Robinson    schedule 05.07.2015
comment
Вы пытались изменить настройку AppleWatch, которая открывает последнее действие при поднятии запястья? В приложении AppleWatch на IOS General. ЕСЛИ это важно для ваших пользователей, вы можете предложить им изменить настройку   -  person Philip    schedule 05.07.2015
comment
Да, это хорошая идея, если эта ошибка станет поведением по умолчанию. В идеале, хотя я не хочу заставлять пользователя менять рабочий процесс Apple Watch только для моего приложения.   -  person William Robinson    schedule 06.07.2015


Ответы (1)


Мы это тоже видим, на данный момент мы убедились, что настроено «открывает последнее действие».

Когда пользовательский интерфейс активен, мы запускаем dispatch_timer для запроса и обработки данных с интервалом в 1 секунду.

Убедитесь, что вы выполняете какую-либо значительную обработку, используя метод NSUserProcessInfo, и приостанавливайте диспетчерские_таймеры всякий раз, когда вы больше не активны. В противном случае вы получите сбои.

person earltedly    schedule 06.07.2015
comment
Что такое NSUserProcessInfo? При поиске я нахожу только NSProcessInfo, и это похоже только на OS X. Я получаю сбои довольно быстро. Мне нужно проверить, должен ли я отправлять тактильную вибрацию после возврата образца, и это должно произойти, когда пользовательский интерфейс не активен. - person William Robinson; 07.07.2015
comment
Интересно, что когда у меня настроено «открывает последнее действие», я получаю гораздо меньше данных о частоте сердечных сокращений, но без сбоев. - person William Robinson; 07.07.2015
comment
Извините, я делал это по памяти, на самом деле это: NSProcessInfo.processInfo().performExpiringActivityWithReason. Это дает блок, который будет выполнять истекающие задачи после того, как экран станет неактивным. Re: частота сердечных сокращений Я полагаю, что в примечаниях к выпуску бета-версии в настоящее время не измеряется частота сердечных сокращений, пока экран неактивен. Это известная ошибка. - person earltedly; 08.07.2015
comment
Когда я начинаю тренировку, я хорошо получаю сердечный ритм. Но когда экран блокируется (становится черным), измерения пульса прекращаются. И через некоторое время датчик тоже останавливается (уже не зеленый). Вы знаете, о чем идет речь? - person Philip; 05.08.2015