Apple Watch与iPhone数据通信———— Watch Connectivity

Apple Watch与iPhone数据通信———— Watch Connectivity

Watch Connectivity原理,iOS App与安装在Watch上的Watch Extension(Watch OS 2.0之后Extension不再放到iPhone中,Watch App可以独立进行数据处理)通过WCSession进行数据传输。

第一步初始化WCSession
在通信之前要确保Watch和iOS上的App都初始化了WCSession,接收方控制器要设置delegate—>WCSessionDelegate,同时要激活WCSession,代码如下:

if ([WCSession isSupported]) {
     WCSession* session = [WCSession defaultSession];
     session.delegate = self;
     [session activateSession];
}   

第二步校验Counterpart
可以传输的数据格式为字典(NSDictionary)、NSData、文件(NSURL), iOS端在发送信息之前应先检验1.Apple Watch是否与手机相连、2.Apple Watch是否安装了该应用。 Watch端在发送前无需检验是否安装了应用。 检验代码如下:

/** Check if iOS device is paired to a watch */
BOOL        session.paired   

/** Check if the user has the Watch app installed */
BOOL        session.watchAppInstalled

watchapp安装成功就会在手表上建立相应app的目录,因此session.watchAppInstalled==false效果等同于watchDirectoryURL != nil。
watchDirectoryURL一般只在需要额外的初始化处理的情况下,比如app重装恢复队列内容、设定初始设置时等情况下会用到。

第三步发送消息
发送方法分为三种:

一.ApplicationContext

- (BOOL)updateApplicationContext:(NSDictionary<NSString *,id> *)applicationContext error:(NSError * _Nullable *)error

只能发送NSDictionary,在对应App被唤醒时系统会将消息发送过去。
接收方App对应的代理方法:

- (void)session:(WCSession *)session didReceiveApplicationContext:(NSDictionary<NSString *,id> *)applicationContext (此处官方文档描述有误)

二.Transfer
分为UserinfoTransfer和FileTransfer,能发送NSDictionary和File

- (WCSessionFileTransfer *)transferFile:(NSURL *)file
                               metadata:(NSDictionary<NSString *,
                                                 id> *)metadata

- (WCSessionFileTransfer *)transferFile:(NSURL *)file
                               metadata:(NSDictionary<NSString *,
                                                 id> *)metadata

接收方App对应的代理方法:

- (void)session:(WCSession *)session didReceiveUserInfo:
        (NSDictionary<NSString *, id> *)userInfo;

- (void)session:(WCSession *)session didReceiveFile:(WCSessionFile *)file;

通过后台传输NSDictionary或者File,发送的数据将以队列的形式传递给目标App,即使当前App暂停或终止传输仍然继续。

三.replyHandle
可以发送NSDictionary或NSData, 发送方可以获得接收方响应。

- (void)sendMessage:(NSDictionary<NSString *, id> *)message replyHandler:(void (^)(NSDictionary<NSString *, id> *replyMessage))replyHandler errorHandler:(void (^)(NSError *error))errorHandler

- (void)sendMessageData:(NSData *)data replyHandler:(void (^)(NSData *replyMessageData))replyHandler
                 errorHandler:(void (^)(NSError *error))errorHandler

实时通讯,传输时要求App必须处于运行时,若iOS App未启动,Watch Extension将会在iOS后台启动App。当iOS为发送方,Watch App未启动时,发送失败。

接收方对应的代理方法:

- (void)session:(WCSession *)session didReceiveMessage:(NSDictionary<NSString *,id> *)message

- (void)session:(WCSession *)session didReceiveMessage:(NSDictionary<NSString *,id> *)message replyHandler:(void (^)(NSDictionary<NSString *,id> *_Nonnull))replyHandler

- (void)session:(WCSession *)session didReceiveMessageData:(NSData *)messageData

- (void)session:(WCSession *)session didReceiveMessageData:(NSData *)messageData replyHandler:(void(^)(NSData *replyMessageData))replyHandler
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,JDBC是Java Database Connectivity的缩写,它是Java语言中用于操作数据库的标准API。在Java程序中使用JDBC查询数据的步骤如下: 1. 加载JDBC驱动程序 在使用JDBC操作数据库之前,需要先加载JDBC驱动程序。可以通过Class.forName()方法来加载驱动程序,例如: ``` Class.forName("com.mysql.jdbc.Driver"); ``` 2. 建立数据库连接 使用DriverManager.getConnection()方法建立与数据库的连接,需要指定数据库的URL、用户名和密码,例如: ``` String url = "jdbc:mysql://localhost:3306/test"; String username = "root"; String password = "123456"; Connection conn = DriverManager.getConnection(url, username, password); ``` 3. 创建Statement对象 使用Connection对象的createStatement()方法创建Statement对象,用于执行SQL语句,例如: ``` Statement stmt = conn.createStatement(); ``` 4. 执行SQL语句 使用Statement对象的executeQuery()方法执行查询语句,例如: ``` String sql = "select * from student where age > 18"; ResultSet rs = stmt.executeQuery(sql); ``` 5. 处理查询结果 使用ResultSet对象处理查询结果,例如: ``` while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); System.out.println("id=" + id + ", name=" + name + ", age=" + age); } ``` 6. 关闭资源 使用完ResultSet、Statement和Connection等资源后需要关闭,例如: ``` rs.close(); stmt.close(); conn.close(); ``` 以上就是使用JDBC查询数据的步骤,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值