【问题标题】:Refreshing Watch App From Watch从手表刷新手表应用程序
【发布时间】:2017-04-01 15:27:47
【问题描述】:

我今天开始搞混 Watch OS 框架,想制作一个快速应用程序,但遇到了几个问题。

我制作了一个仅显示当前电池百分比以及电池状态的 iOS 应用。然后我想在手表上展示这一点。

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

  2. 这种类型与数字 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


    【解决方案1】:

    documentation

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

    如果 watchapp 不是前台,消息将不会被传递,因为isReachable 是假的。

    您应该使用的方法是update​Application​Context(_:​) - 它会等到手表应用程序在前台打开,然后才会交付。

    【讨论】:

    • 感谢您的回复。如果尚未打开 iOS 应用程序怎么办。当isReachable 为真时,如何刷新,然后发送到手表应用程序。
    • @Michael 如果 ios 应用还没有打开,你将如何获得电池电量?
    • 那是我的错。应该换个说法。如果手表应用程序向其发送询问信息的消息,是否有办法刷新该电池电量?还是我一定要先打开iOS?
    • @Michael 您可以通过sendMessage(_:replyHandler:errorHandler:) 将即时消息从手表发送到手机 - 在这个方向上,只需要有效的会话,不需要isReachable。并以电池电量响应。从手机发送消息到手表需要手表应用程序处于前台,从手表应用程序发送消息到 ios 应用程序允许 ios 应用程序处于后台/暂停状态。但无论如何应该启动 ios 应用程序以激活 WCSession。
    • 啊,明白了。谢谢。
    猜你喜欢
    • 2016-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    • 2013-12-01
    • 1970-01-01
    相关资源
    最近更新 更多