需要的拿去—Android手表和手机通讯研究

本文探讨了Android手机和智能手表通过数据层进行通讯的原理,包括同步数据项(DataItem)的发送和接收,以及如何通过DataApi、NodeApi和MessageApi管理数据交互。介绍了使用DataItem和Asset发送数据,以及在Service和Activity中实现数据监听器的细节,以实现实时双向通信。
摘要由CSDN通过智能技术生成

手机和手表的通讯是通过数据层来完成的,数据层这个概念这里解释一下:手机和手表通过蓝牙连接起来,相同包的应用(比如手机有一个包名为com.soufun.app的应用,手表也有一个相同包名的应用)由系统自动分配一个数据层的概念,所有涉及手机手表之间的数据通讯的工作都通过数据层来实现。只要有相同包名的应用同时安装在了手机和手表上,则系统就自动生成一个数据层来管理手机和手表的数据变化。

手机和手表之间的数据交流通过数据层来完成,两者都可以向数据层发送消息,从而引起数据层数据事件发生,也可以分别设置各自的监听器来监听数据层的这些事件,从而实现接收数据的功能。

手机和手表的监听器可以看做是客户端,两者共同监听‘数据层’的数据变化,无论是从手机还是手表发送消息,都会引起数据层的状态变化。这个仅限于发送数据项请求,发送消息请求 sendMessage 是单方向的请求,发送请求之前需要事先知道接收方的节点信息,这个稍后会讲到。

同步数据项的时候(即发送dataItemRequest),凡是有监听器的地方都可以接收到这个请求。这一点类似Android中的intent机制,只不过需要程序员自己去管理和筛选这些请求。

数据的发送

数据的发送分两部分,一个是数据项DataItem的同步,这个是多向的,这个发送方明确,接收方不明确;还有一种是定向发送,即指定一台设备发送数据,这个发送方和接收方都是明确的。前者发送出消息之后在手机和手表的数据层事件监听器中都会触发数据事件,后者,只会触发接收端与消息监听相关的回调方法。

同步数据项(DataItem)介绍

同步数据之前需要先与数据层建立一个连接,建立连接的一般代码如下:

GoogleApiClient mGoogleAppiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(new ConnectionCallbacks() {
@Override
public void onConnected(Bundle connectionHint) {
Log.d(TAG, "onConnected: " + connectionHint);
//连接成功
}
@Override
public void onConnectionSuspended(int cause) {
Log.d(TAG, "onConnectionSuspended: " + cause);
}
})
.addOnConnectionFailedListener(new OnConnectionFailedListener() {
@Override
public void onConnectionFailed(ConnectionResult result) {
Log.d(TAG, "onConnectionFailed: " + result);
}
})
.addApi(Wearable.API)
.build();
mGoogleAppiClient.connect();

在调用了connect()方法之后,监听onConnected事件。 至于发送数据的方法可以在onConnected方法中写。也可以在确保连上之后后续的代码中写。在手表上这部分的代码需要做一个处理,就是在onConnected方法中写发送数据的逻辑,在发送数据的结果有一个回调接口,在这个接口中再把这个已经和数据层建立的连接断开,官方demo这么写的,估计是为了省电。当然也可以保持一个长连接,所有向数据层发送数据的方法都可以通过这个连接发送。

连接已经建好之后,再要了解一下数据通信的载体Dataitem:

一个DataItem定义了手机和手表之间的数据交互接口,一个DataItem由两部分组成:1、payload 存放数据;2、Path 用于数据层监听器的识别 路径唯一,DataItem可以看成是对手机手表之间交互数据的一个载体。

但是通常不直接使用Dataitem,而是使用一些系统API

使用方法:

  1. 创建一个PutDataMapRequest对象,设置DataItem路径path。
  2. 调用PutDataMapRequest.getDataMap() 方法来获取一个DataMap
  3. 调用DataMap的各种put...()方法来设置值。
  4. 调用PutDataMapRequest.asPutDataRequest()方法来获得一个PutDataRequest对象。
  5. 调用DataApi.putDataItem()方法来请求系统创建DataItem。 如果手机和可穿戴设备断开了连接,那么数据会被缓存并在下次重建连接的时候同步数据。
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值