从手表刷新手表应用程序

时间:2017-04-01 15:27:47

标签: ios objective-c iphone apple-watch watch-os-3

我今天开始搞乱使用Watch OS框架,并且希望将一个快速的应用程序放在一起,但是已经提出了几个问题。

我制作的iOS应用程序只显示当前的电池电量百分比以及电池的状态。然后我想在手表上显示出来。

  1. 手表应用程序更新的唯一时间是我完全关闭iOS应用程序,然后在手表应用程序处于活动状态时打开它。如果我在iOS应用程序打开后打开它,如何更新我的手表应用程序?

  2. 这种情况与2号相关。但是如何让手表应用程序在iOS应用程序处于后台后从其中获取信息?作为一个例子,假设iOS应用程序已经在后台,我想获取电池%而无需将iOS应用程序打开到前台。

  3. 关于我如何设置它的一些注意事项 -

    在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"]];
    }
    

    此外还有用于处理电池状态消息的代码,该消息有点长。

    我希望我提供了大量的信息来提供帮助。

1 个答案:

答案 0 :(得分:0)

根据documentation

  

使用send​Message(_:​reply​Handler:​error​Handler:​)或   send​Message​Data(_:​reply​Handler:​error​Handler:​)方法   将数据传输到可达的对应方。这些方法是有意的   用于iOS应用程序和WatchKit之间的即时通信   延期。 is​Reachable属性当前必须为true   成功的方法。

如果watchapp不是前景,则由于isReachable为假,因此不会传递消息。

你应该使用的方法是update​Application​Context(_:​) - 它将等到观看应用程序将在前台打开,然后才会被传递。