gpt4 book ai didi

ios - WatchOS 从 iPhone 获取数据

转载 作者:搜寻专家 更新时间:2023-11-01 05:53:24 26 4
gpt4 key购买 nike

我正在开发 Apple Watch 应用程序。当 iPhone 上发生特定事件时,我能够从 iPhone 向 Apple Watch 发送数据。但是,我希望 watch 在开始运行时获取数据。我应该如何处理这个问题?最有效的方法是什么?

最佳答案

WatchConnectivity

首先,应该相互通信的两个类(iOS 和 watchOS)需要符合 <WCSessionDelegate>#import WatchConnectivity框架

在发送数据之前,您需要检查您的设备是否能够发送数据

if ([WCSession isSupported]) {
WCSession *session = [WCSession defaultSession];
session.delegate = self;
[session activateSession];
NSLog(@"WCSession is supported");
}

然后,如果您希望使用“交互式消息传递”(sendMessage API),则需要先查看其他设备是否可达:

if ([[WCSession defaultSession] isReachable]) {
//Here is where you will send you data
}

“后台操作”API 不需要在您调用 WCSession API 时可以访问对应设备。

在应用程序之间传输数据时,您有多种选择,在 Apple Documentation 中它们是这样描述的:

  • 使用 updateApplicationContext:error:仅将最新的状态信息传达给对方的方法。当对方醒来时,它可以使用此信息来更新自己的状态并保持同步。使用此方法发送新词典会覆盖以前的词典。

  • 使用 sendMessage:replyHandler:errorHandler:sendMessageData:replyHandler:errorHandler:立即将数据传输给对方的方法。这些方法用于在您的 iOS 应用和 WatchKit 扩展同时处于事件状态时进行即时通信。

  • 使用 transferUserInfo:在后台传输数据字典的方法。您发送的词典正在排队等待传送给对方,并且在当前应用程序暂停或终止时继续传输。

  • 使用 transferFile:metadata:在后台传输文件的方法。如果您想要发送的不仅仅是一个简单的值字典,请使用此方法。例如,使用此方法发送图像或基于文件的文档。

我将举例说明如何使用 Application Context 发送/接收数据

发送数据:

WCSession *session = [WCSession defaultSession];
NSError *error;

[session updateApplicationContext:@{@"firstItem": @"item1", @"secondItem":[NSNumber numberWithInt:2]} error:&error];

接收数据:

- (void) session:(nonnull WCSession *)session didReceiveApplicationContext:(nonnull NSDictionary<NSString *,id> *)applicationContext {

NSLog(@"%@", applicationContext);


NSString *item1 = [applicationContext objectForKey:@"firstItem"];
int item2 = [[applicationContext objectForKey:@"secondItem"] intValue];
}

有关 WatchConnectivity 的更多信息,我强烈建议您观看 WWDC2015 session video并阅读 Apple Documentation on WatchConnectivity

关于ios - WatchOS 从 iPhone 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38693969/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com