Ответ 1
Вы можете запускать собственный код только при активном приложении. Поэтому я боюсь, что вы не сможете этого сделать.
Я думаю, что уже знаю ответ на этот вопрос, но я хотел попросить просто быть основательным.
Рассмотрите встроенное приложение Карты Apple Watch. Когда вы используете пошаговые инструкции, когда время поворачивается влево или вправо, часы воспроизводят пользовательский тактильный паттерн - даже если экран выключен, а приложение - в фоновом режиме. Другой пример - пока вы тренируетесь - если вы поставили цель, вы получите легкий прикосновение к запястью, когда вы получите 50% и 100% там, даже если вы не смотрите на часы в то время (экран выключен, приложение фоном).
В watchOS 2, есть ли у нас сторонние разработчики, чтобы приложение играло определенный тактильный паттерн, когда экран выключен, и приложение основано? Я знаю, что метод playHaptic:
работает, пока приложение активно, чтобы вы могли играть несколько разных типов тактильных паттернов, и я знаю, что, хотя приложение неактивно, вы можете получить уведомление, но уведомление будет только воспроизводить "уведомление" о тактильном чувстве, в этом нет выбора.
Вы можете запускать собственный код только при активном приложении. Поэтому я боюсь, что вы не сможете этого сделать.
Вот как я играю тактично в фоновом режиме, в первую очередь вам необходимо включить фоновый мод в 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];
Просто, чтобы опубликовать обновление по моему собственному вопросу пару лет спустя - в watchOS 3 приложения для тренировки было предоставлено фоновое исполнение, но не было haptics (я думаю).
В watchOS 4, приложения для тренировки, приложения для записи звука и приложения для навигации имеют фоновое исполнение; навигационные приложения могут отправлять haptics в фоновом режиме. Кроме того, "самое последнее приложение" (последнее приложение, которое все еще появляется, если запястье поднято в течение 2 минут или 8, если включено расширенное самое раннее время) имеет некоторые привилегии для отправки haptics по завершении передачи данных WatchConnectivity или NSURLSession или когда приходит уведомление. Подробнее см. в документах.