我今天开始搞乱使用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"]];
}
此外还有用于处理电池状态消息的代码,该消息有点长。
我希望我提供了大量的信息来提供帮助。
答案 0 :(得分:0)
使用
sendMessage(_:replyHandler:errorHandler:)
或sendMessageData(_:replyHandler:errorHandler:)
方法 将数据传输到可达的对应方。这些方法是有意的 用于iOS应用程序和WatchKit之间的即时通信 延期。isReachable
属性当前必须为true 成功的方法。
如果watchapp不是前景,则由于isReachable
为假,因此不会传递消息。
你应该使用的方法是updateApplicationContext(_:)
- 它将等到观看应用程序将在前台打开,然后才会被传递。