【发布时间】:2017-04-01 15:27:47
【问题描述】:
我今天开始搞混 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"]];
}
还有处理电池状态消息的代码,它有点长。
我希望我提供了大量的信息来提供帮助。
【问题讨论】:
标签: ios objective-c iphone apple-watch watchos-3