从 Watch 刷新 Watch App
Refreshing Watch App From Watch
我今天开始摆弄 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"]];
}
里面还有处理电池状态消息的代码,有点长。
我希望我提供了大量的信息来帮助你。
Use the sendMessage(_:replyHandler:errorHandler:)
or
sendMessageData(_:replyHandler:errorHandler:)
method to
transfer data to a reachable counterpart. These methods are intended
for immediate communication between your iOS app and WatchKit
extension. The isReachable
property must currently be true for these
methods to succeed.
如果 watchapp 不是前台,则不会传递消息,因为 isReachable
为 false。
您应该使用的方法是 updateApplicationContext(_:)
- 它会等到 watch 应用程序在前台打开,然后才会交付。
我今天开始摆弄 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"]];
}
里面还有处理电池状态消息的代码,有点长。
我希望我提供了大量的信息来帮助你。
Use the
sendMessage(_:replyHandler:errorHandler:)
orsendMessageData(_:replyHandler:errorHandler:)
method to transfer data to a reachable counterpart. These methods are intended for immediate communication between your iOS app and WatchKit extension. TheisReachable
property must currently be true for these methods to succeed.
如果 watchapp 不是前台,则不会传递消息,因为 isReachable
为 false。
您应该使用的方法是 updateApplicationContext(_:)
- 它会等到 watch 应用程序在前台打开,然后才会交付。