WatchOS 2: тактильная обратная связь в фоновом режиме

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

Рассмотрите встроенное приложение Карты Apple Watch. Когда вы используете пошаговые инструкции, когда время поворачивается влево или вправо, часы воспроизводят пользовательский тактильный паттерн - даже если экран выключен, а приложение - в фоновом режиме. Другой пример - пока вы тренируетесь - если вы поставили цель, вы получите легкий прикосновение к запястью, когда вы получите 50% и 100% там, даже если вы не смотрите на часы в то время (экран выключен, приложение фоном).

В watchOS 2, есть ли у нас сторонние разработчики, чтобы приложение играло определенный тактильный паттерн, когда экран выключен, и приложение основано? Я знаю, что метод playHaptic: работает, пока приложение активно, чтобы вы могли играть несколько разных типов тактильных паттернов, и я знаю, что, хотя приложение неактивно, вы можете получить уведомление, но уведомление будет только воспроизводить "уведомление" о тактильном чувстве, в этом нет выбора.

Ответ 1

Вы можете запускать собственный код только при активном приложении. Поэтому я боюсь, что вы не сможете этого сделать.

Ответ 2

Вот как я играю тактично в фоновом режиме, в первую очередь вам необходимо включить фоновый мод в Capabilities для WatchExtensionand, чтобы включить: Workout Processing и Audio, Airplay. Также вам нужно включить функцию WatchExtension HealthKit.

#import < HealthKit/HealthKit.h > добавить HKWorkoutSessionDelegate

-(void)awakeWithContext:(id)context{

[super awakeWithContext:context];
HKHealthStore *cwHealthStore = [[HKHealthStore alloc] init];
cwConfiguration = [[HKWorkoutConfiguration alloc] init];
cwConfiguration.activityType = HKWorkoutActivityTypeOther;
NSError *error;
HKWorkoutSession *cwSession = [[HKWorkoutSession alloc] initWithConfiguration:cwConfiguration error:&error];
[cwSession setDelegate:self];
if (!error) {
    [cwHealthStore startWorkoutSession:cwSession];
}
    [self test];
 }


#pragma mark WorkoutSession Delegates

- (void)workoutSession:(HKWorkoutSession *)workoutSession
  didChangeToState:(HKWorkoutSessionState)toState
         fromState:(HKWorkoutSessionState)fromState
              date:(NSDate *)date{
NSLog(@"------>%ld", (long)toState);
}

 - (void)workoutSession:(HKWorkoutSession *)workoutSession didFailWithError:(NSError *)error{
NSLog(@"%@", error);
}

И теперь вы можете играть в тактику в фоновом режиме.

  -(void)test{
    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerTrick:) userInfo:nil repeats:true];


 }

- (void)timerTrick:(NSTimer *)time {

        [[WKInterfaceDevice currentDevice] playHaptic:WKHapticTypeStart];

}

Не прощайте, чтобы остановить сеанс тренировки после выхода из контроллера:

     [cwHealthStore endWorkoutSession:cwSession];

Ответ 3

Просто, чтобы опубликовать обновление по моему собственному вопросу пару лет спустя - в watchOS 3 приложения для тренировки было предоставлено фоновое исполнение, но не было haptics (я думаю).

В watchOS 4, приложения для тренировки, приложения для записи звука и приложения для навигации имеют фоновое исполнение; навигационные приложения могут отправлять haptics в фоновом режиме. Кроме того, "самое последнее приложение" (последнее приложение, которое все еще появляется, если запястье поднято в течение 2 минут или 8, если включено расширенное самое раннее время) имеет некоторые привилегии для отправки haptics по завершении передачи данных WatchConnectivity или NSURLSession или когда приходит уведомление. Подробнее см. в документах.