使用 watchOS2 中的 WatchConnectivity 在 iOS 和 WatchOS 之间发送消息

2024-02-28

我看了WWDC2015,看到现在可以在手表上开发原生应用了。这开启了很多功能,我想知道如何在我的 iOS 应用程序和 AppleWatch 应用程序之间发送数据。

我看到有一个新的框架叫做WatchConnectivity。我如何使用它以及来回发送数据时我有哪些选择?


手表连接

首先,两个应该相互通信的类(iOS 和 watchOS)需要符合<WCSessionDelegate> and #import the 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 时可以访问对应设备。

在应用程序之间传输数据时,您有多种选择,苹果文档 https://developer.apple.com/library/prerelease/ios/documentation/WatchConnectivity/Reference/WCSession_class/index.html#//apple_ref/occ/cl/WCSession它们是这样描述的:

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

  • Use the sendMessage:replyHandler:errorHandler: or sendMessageData:replyHandler:errorHandler:立即将数据传输给对方的方法。这些方法旨在当您的 iOS 应用程序和 WatchKit 扩展都处于活动状态时进行即时通信。

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

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

我将给你一个如何发送/接收数据的例子应用上下文

发送数据:

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 会议视频 http://developer.apple.com/videos/wwdc/2015/?id=713并阅读Apple 关于 WatchConnectivity 的文档 https://developer.apple.com/library/prerelease/ios/documentation/WatchConnectivity/Reference/WatchConnectivity_framework/index.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 watchOS2 中的 WatchConnectivity 在 iOS 和 WatchOS 之间发送消息 的相关文章

  • 快速钥匙串更新只有在第二次尝试时才起作用

    您好 我在更新存储在钥匙串中的登录信息方面遇到了 iOS 钥匙串的一个非常奇怪的问题 因此 如果没有保存的凭据 则正确运行保存函数会保存登录信息 如果登录信息已存在并且用户更新了密码 则更新功能仅正确更新密码 但是 如果登录信息存在并且我尝
  • iOS uiwebview 在 WebThread 中崩溃

    我正在寻求一些建议或帮助诊断我所看到的这次崩溃 目前 我认为这可能是一个 webkit 错误 但一切皆有可能 因此请提供您可能有的任何见解 Incident Identifier AEB8EE37 E5D4 4975 97F4 2B2038
  • 与 Objective-C 的 VPN 连接

    有没有办法在 iPhone 的 Objective C 中以编程方式建立 VPN 连接 有这方面的好教程吗 有人知道吗 多谢 我认为第三方应用程序无法访问这些 API
  • 如何在应用程序项目中使用 Cocoa Touch 框架

    我熟悉构建单个 iOS 应用程序 但我坚持使用 Cocoa Touch 框架向多个应用程序共享通用代码 问题 框架的头文件不可见 无法链接到消费应用程序项目 我做了什么 1 我创建了一个名为 libTestFramework 的项目 Coc
  • iPhone SQLite页面缓存不断增长

    I use sqlite数据库用于存储 还有许多数据库事务 我的问题是 sqlite 页面缓存的内存使用量快速增长 在instruments我可以找到这条线 Graph Category Live Bytes Living Transien
  • 如何使用 SwiftUI 获取多个屏幕上的键盘高度并移动按钮

    以下代码获取键盘显示时的键盘高度 并将按钮移动键盘高度 在转换源 ContentView 和转换目标 SecibdContentView 处以相同的方式执行此移动 但按钮在转换目标处不移动 如何使按钮在多个屏幕上移动相同 import Sw
  • UISlider不会自动重绘

    我的应用程序上有一个 UISlider 有时我不仅需要更新它的值 还需要更新它的minimumValue 值已更改 但如果我调用 setValue 方法或为滑块分配新值 它会具有新值 但滑块不会将自身重新绘制到该新值应有的位置 我怎样才能重
  • 如何组合两个 SwiftyJSON 对象

    我有一个 swiftyJSON 对象 例如 location http img http commentCount 0 timestamp 1432460217550 我希望能够向其附加另一个 swiftyJSON 对象 使其看起来像 lo
  • 如何为图层阴影不透明度设置动画?

    我有一个视图 我已将 LayerOpacity 设置为 1 theView layer shadowOpacity 1 0 当视图位于屏幕下方时 这看起来很好 当我将此视图向上移动以与另一个有阴影的视图齐平时 它们看起来不太好 有没有办法让
  • 在 ios 版 Ionic 中接收 URL

    我正在使用离子框架 我正在尝试设置一种从另一个应用程序接收网址的方法 就像 您在浏览器中 单击共享 然后将链接发送到另一个应用程序 我的应用程序 我找到了这个cordova https stackoverflow com questions
  • NSURLCache 不缓存

    我正在使用 Xcode 6 1 6A1030 iOS7 和 iOS8 模拟器 NSURLCache 似乎没有缓存任何东西 我使用 Cache Control 标头 我的服务器返回带有 max age 6000 的 Cache Control
  • iOS 如何触发视频退出全屏后继续播放?

    我正在构建一个在 iOS 中播放视频的网站 我有一个在 iOS 中工作的全屏按钮 但是退出全屏时视频会暂停 有谁知道一种方法可以强制视频在退出全屏时继续播放 或者如何设置一个侦听器来触发视频在退出全屏时自动播放 这是我的代码
  • 为arm64或arm7s编译OpenSSL FIPS功能库时出现未知的cpu类型

    我可以成功 至少没有警告并生成 a 文件 针对 arm7 x86 64 和 i386 进行编译 当我编译arm64时 我得到Unknown cpu type 100000c no adjustments made 当我编译arm7s时 我得
  • 在 Swift 中以编程方式为 iOS 制作带有名字首字母的图像,例如 Gmail

    我需要在 UITableView 中显示与其姓名相对应的每个用户的个人资料图片 在下载图像之前 我需要显示一张带有他名字的第一个字母的图像 就像在 GMail 应用程序中一样 如何在 Swift for iOS 中以编程方式执行此操作 不需
  • UILabel 中的文本未垂直居中

    我使用以下代码创建了一个标签 func setupValueLabel valueLabel numberOfLines 1 valueLabel font UIFont name Avenir Black size 50 valueLab
  • removeItemAtPath 完成

    我正在以这种方式删除路径上的文件 UIPanGestureRecognizer gesture UIPanGestureRecognizer sender UIButton button UIButton gesture view UIPa
  • 动画 UICollectionView 单元格大小更改并重新定位周围单元格

    Goal 以动画方式改变单元格的高度并重新定位周围的单元格 设想 集合视图中的某些单元格会加载远程图像 最初 这些单元格的大小是静态的 并显示活动指示器 加载图像后 会将其添加到其单元格中 并且更改单元格的高度以适合照片 Notes 我正在
  • 如何将自定义 C 代码放入 SwiftPM 包中?

    我正在尝试将 C 代码打包到 Swift 模块中 我们称之为CModule 一旦我将其放入项目的基本文件夹中 Swift模块 并配置了搜索路径 我可以在 Swift 文件中自动完成工作 并检测错误 警告 问题是 导入时它无法识别该模块 并且
  • 如何观察UserDefaults的变化?

    我有一个 ObservedObject在我看来 struct HomeView View ObservedObject var station Station var body some View Text self station sta
  • 对象指针值作为字典的键

    我想使用对象的引用值作为字典的键 而不是对象值的副本 因此 我本质上想在字典中存储与另一个对象的特定实例关联的对象 并稍后检索该值 这可能吗 是不是完全违背了NSDictionary的理念 我可以看出我可能以错误的方式处理这个问题 因为字典

随机推荐

  • shell命令SET -X在脚本中的意思[重复]

    这个问题在这里已经有答案了 所以我有一个文件部署 sh 并且它有 shell 脚本 自从我知道这件事以来 我就有点困惑 这是什么意思set x实际上意味着 运行该文件后 我观察到在文件中的命令后面写入的命令在终端中被提及 sign 就像如果
  • 文档中的 tf.data.Dataset.window 示例失败

    我正在尝试使用一个例子TF文档 https www tensorflow org api docs python tf data Dataset window for tf data Dataset window并且文档中的示例失败了 源自
  • 使用外键批量插入表

    我有一个客户表 其中包含客户的详细信息 以下是字段 CustId PrimaryKey Name Date of Birth 我有另一个表 资产信息 有以下字段 AssetId PrimaryKey AssetValue CustId Fo
  • 尝试执行 jQuery AJAX 调用时 JavaScript 错误意外标识符

    我有这个 jQuery 代码
  • 当前上下文中不存在名称“SqlDataSourceEnumerator”

    在 Visual Studio 中的 C net 5 程序中 我正在测试使用 SqlDataSourceEnumerator 的代码 public static List
  • 全关联缓存是否比直接映射缓存具有更高的未命中率?

    以下是一个面试问题 为什么全关联缓存的未命中率可能高于直接映射缓存 我认为这根本不可能 有人可以分享一些对此的见解吗 你应该假设它们大小相同吗 如果不是 则如果大多数未命中是 容量 未命中 而不是冲突未命中 则较小的全关联高速缓存仍然可能会
  • 如何让MySQL正确处理UTF-8

    的回应之一我昨天问的一个问题 https stackoverflow com questions 198721 converting a word document into usable html in php建议我确保我的数据库可以正确
  • 更新反应组件而没有父组件在其之外

    如果组件没有父组件 我应该如何正确更新组件 我找到了两种方法来做到这一点 第一种方法 https jsfiddle net 69z2wepo 28597 这里我通过改变组件的状态来更新组件 var Hello React createCla
  • 捕获无法处理的异常并重新加注

    这是我的问题的后续使用 SQLAlchemy 和多处理挂入 Python 脚本 https stackoverflow com questions 8785899 hang in python script using sqlalchemy
  • jquery 附加到列表的前面/顶部

    我有这个无序列表 ul li two li li three li ul 有没有办法可以将其添加到无序列表中 使其最终像这样 ul li ONE li li two li li three li ul 请注意 ONE 已添加到列表的前面 顶
  • 打开 ViewPager2 到特定位置而不滚动

    我已经用一些视频实现了回收视图 say 10 单击任何项 目都会打开一个viewpager2 which is on some other activity与所有物品and单击的一个 来自recyclerview 显示 之后 用户只能从那里
  • 是否可以让 Visual Studio 索引源代码以改进字符串搜索?

    我经常在 VS2008 中使用字符串搜索功能来构建整个解决方案 有没有办法通过让 VS2008 索引所有源代码和配置文件来提高其搜索速度 类似于 Google 桌面索引文件的方式 这增加了对 VS 解决方案中所有文件的即时全文搜索 不是免费
  • 设置 Gin 中未找到的路由

    我在 Gin 中设置了默认路由器和一些路由 router gin Default router POST users save router GET users getAll 但是我该如何处理 Gin 中找不到 404 路线呢 最初 我使用
  • 如何处理 JSF 中的动态角色或用户名更改?

    我有一个在 glassfish 2 1 上运行的 JSF 应用程序 具有 EJB 3 后端 对于身份验证 我使用自定义领域 用户使用他在注册时指定的电子邮件地址和密码进行身份验证 一切都运转良好 现在我有两个相关的问题 1 用户可以编辑他的
  • Xcode 4 Preview 2 是否足够稳定,可以用于开发?

    Xcode 4 Preview 2 是否足够稳定 可以用于开发 由于最终版本已经出来 这个线程可以忽略 从我最近看到的情况来看 它相当不稳定 在崩溃之前很难使用它超过几分钟 我当然不会在实际项目中使用它
  • 任务中重新抛出异常 (TPL) 丢失堆栈跟踪

    我有重新抛出异常的代码 当我后来从 task Exception 读取异常时 它的堆栈跟踪指向我重新抛出异常的位置 如我所料 第 n 行而不是第 m 行 为什么会这样呢 TPL 中的错误或更可能是我忽略的东西 当我解决方法时 我可以将异常包
  • Visual Studio Code - 按文件夹对待处理的更改进行分组

    由于某些受支持的扩展 我想摆脱当前的 IDE Jetbrains 并迁移到 Visual Studio Code VS Code 中我只缺少一件事 如果我在源代码管理中有多个文件作为待处理的更改 它们只会显示为平面列表 例如IntelliJ
  • swiftui 如何从详细信息到编辑视图获取核心数据值

    通过使用核心数据构建应用程序来学习 swiftui 陷入AddEdit的Detail到Edit的数据流向问题 从 AddEdit 到 List 以及从 List 到 Detail 的流程都可以 在网上搜索但没有找到有用的信息或者我不明白 这
  • 合并到特定提交

    我创建了一个名为newbranch来自mastergit 中的分支 现在我已经完成了一些工作并想要合并newbranch to master 但是 我做了一些额外的更改newbranch我想合并newbranch直到倒数第四次提交maste
  • 使用 watchOS2 中的 WatchConnectivity 在 iOS 和 WatchOS 之间发送消息

    我看了WWDC2015 看到现在可以在手表上开发原生应用了 这开启了很多功能 我想知道如何在我的 iOS 应用程序和 AppleWatch 应用程序之间发送数据 我看到有一个新的框架叫做WatchConnectivity 我如何使用它以及来