Сегодня я начал возиться с фреймворком Watch OS и хотел собрать быстрое приложение, но пришел к паре вопросов.
Я сделал приложение для iOS, которое просто показывает текущий процент заряда батареи, а также состояние батареи. Затем я хотел показать это на часах.
Единственный раз, когда приложение для часов будет обновляться, — это когда я полностью закрою приложение для iOS, а затем открою его, пока приложение для часов активно. Как разрешить обновление приложения для часов, если я открою его после открытия приложения для iOS?
Это относится к пункту 2. Но как разрешить приложению для часов получать информацию из приложения iOS после того, как оно было в фоновом режиме? В качестве примера предположим, что приложение iOS было в фоновом режиме, и я хотел получить процент заряда батареи, не открывая приложение iOS на переднем плане.
Некоторые примечания о том, как я это настроил -
В приложении iOS в методе viewDidLoad
я начинаю сеанс.
if ([WCSession isSupported]) {
wcSession = [WCSession defaultSession];
wcSession.delegate = self;
[wcSession activateSession];
}
Затем вызовите мой метод, чтобы обновить фактический процент заряда батареи и состояние. В этом методе у меня есть это, которое отправляет информацию на часы:
NSDictionary *message = @{
@"message" : [NSString stringWithFormat:@"%@", [numberFormatter stringFromNumber:levelObj]],
@"message_2" : [NSString stringWithFormat:@"%ld",(long)[UIDevice currentDevice].batteryState],
};
[wcSession sendMessage:message replyHandler:nil errorHandler:^(NSError * _Nonnull error) {
NSLog(@"%@", error.localizedDescription);
}];
Я также вызываю этот же метод в viewDidAppear, поэтому мне не нужно полностью перезапускать приложение, чтобы разрешить обновление аналога часов.
На стороне часов у меня есть метод viewWillActivate
с той же активацией, что и на стороне iOS, а также метод для обработки того, что приложение часов получает со стороны iOS. Но он будет обновляться только тогда, когда я полностью перезапущу приложение iOS.
- (void)session:(WCSession *)session didReceiveMessage:(NSDictionary<NSString *,id> *)message {
NSLog(@"Message recieved!");
[_batteryLevelLabelW setText:message[@"message"]];
}
Также есть код для обработки сообщения о состоянии батареи, которое немного длинное.
Я надеюсь, что дал хороший объем информации, чтобы помочь.