Android微信上的Wear的开发总结

2014年3月19日,Google发布为智能手表打造的全新智能平台Android Wear,微信于6.0.2版本开始支持,Google对Android Wear的定位是手机的辅助设备,因为其更接近人体,所以能采集更多人体的健康信息,同时,它比手机更快更方便查看消息。

1、通讯

作为手机的辅助,它与手机数据的通讯显得尤其重要,Android Wear采用蓝牙4.0(蓝牙低功耗版本)与手机进行通讯,google把蓝牙连接层已经封装好了,通过gms的Google Api Client提供数据的传输。

Google Api Client提供给开发者三个API的通讯方式,Message Api,Data Api,Channel Api。

Message Api类似于广播的方式,需要知道其他的节点的Id才可以对给其发送消息。

Data Api类似于共享队列的方式,不需要支持其他节点的Id,只需要把数据放到队列中即可。

Channel Api是大文件的传输,如电影,大音乐文件,是点对点传输。

微信使用的是MessageApi和DataApi结合的方式。

1、传输数据如果大于100KB,使用DataApi的Asset或者ChannelApi来进行传输。

2、如果小于100KB,使用MessageApi的方式进行传输。

选取100KB作为临界点是google官方的限制,在小于100KB的情况采用MessageAPI方式进行传输,是因为MessageApi是可靠传输方式,可以知道消息是否真正送达该节点。而在大于100KB的情况使用了DataApi的Asset传输,则会自己通过超时的方式来确定对应节点是否接收到消息。

微信Phone和Wear的通讯模型,最开始是端对端的方式,把Wear端和Phone端都作为一个Client来进行通讯。

在端对端的模型中,两者是对等的,每一个业务双方都需要Listener和Handler。

优点:适用于业务量少,开发周期短

缺点:业务增多,代码量增加巨大

现阶段的通讯模型做了一些改进,把原来的端对端通讯改成了客户端服务器模型,把所有的通讯进行归类。

客户端到服务器的短请求:一次请求发送,一次请求返回

客户端到服务器的长请求:多次请求发送,一次请求返回

服务器到客户端的Push:Phone主动向Wear 推送数据

该模型中,每个传输的都是一个统一的数据包进行传输,数据包包含了包头和包数据,包头定义了解析高数据的方式,包数据是每个业务自己生成的内容。每一个包都有唯一的ID进行追踪。

短请求类似于Http请求,长请求类似于Http中的长连接,对于客户端的调用方式也和Http请求类似,由Client,Request,Response组成,阻塞的方式调用。

优点:适用于业务量较多,对基本的包封装和每个业务进行解耦,提高增加新业务的开发速度。

缺点:前期工作稍微多一些

2、健康数据

手表相对于手机来说,更贴近人体,所以手表应用的一个必备的属性就是健康属性,微信目前采集了两种健康数据,一个是步数,一个是心跳。

  1. 获取步数时有个坑,就是获取的stepCount是历史总步数,如果你需要获得今天所走的步数,需要在0点的时候,记录一个总数,然后再24点的时候拿当前总步数减去0点总步数才可以得到。
  2. 获取心跳需要注意的是心跳的精度,分为三个级别,根据自己的需求进行调整。
  3. 获取健康数据的时候还需要加入一些权限设置,手机和手表都需要加。

3、消息通知

Notification是AndroidWear的一个重要功能之一,Android Wear会自动将手机的Notification同步到手表上,但是这样同步到的Notification可以做的Action非常有限,不允许使用手表上的资源,如录音,磁盘等。

一般来说,Phone App需要支持Wear Notification有两种方式:

  1. 在PhoneApp的Notification中加入WearableExtender的方式,可以为Wear上的Notification指定一些特殊的Action
  2. 自己将数据传到Wear上然后本地创建一个Notification,这样做的好处是可以直接使用Wear上的资源。

第二种方式可以实现录音,直接拿到用户的语音数据,录音的方法就是是用AudioRecord,和手机上的实现差不多,需要注意的是不能直接在左滑的时候使用AudioRecord,因为当时录音资源一直被Google占用,需要跳到自己的Activity中才可以使用。

Wear Notification不支持RemoteView,但是支持Embedded Activity,而Embedded Activity的限制也很多,例如,上下滚动的Touch操作,会触发Notification的切换,对Icon的点击效果变化并不友好,背景也不能设置成为透明。Notification不能显示Image和ImageSpan,可以显示google系统支持的Unicode编码Emoji。

Wear Notification有提供一个提供文字输入的方式,就是RemoteInput,调用google的语音识别界面,可以返回用户语音的文字内容。

4、界面

Wear上的界面开发需要适配方形表和圆形表,google通过有提供roundlayout和rectlayout的接口来进行适配,官方文档有详细的说明,这里不过多阐述了,但是这个是静态的方式来进行适配,如果是需要动态适配,就需要有一个随时能够获取表盘的形状的接口。

通过在Activity启动时,传入ContentView,就可以动态获取到当前表盘的形状。

5、性能以及一些tip

  • 在当前手表的性能下,要把复杂的计算任务放到Phone App来做,而Wear App只负责显示。
  • Wear App的耗电只需要主要是使用传感器时需要及时释放,大部分时候用户在不使用手表时,会恢复到睡眠模式。
  • Wear App的存储尽量只做必须的缓存,大部分数据都是用时从手机那边拿就可以了。
  • 开发Wear App时,需要很注意权限,Wear的所有权限手机端都要有,如果漏掉一个就会出现Wear App装不到手表上。
  • Wear App的签名必须和Phone App的签名保持一致。

原文发布于微信公众号 - WeMobileDev(WeMobileDev)

原文发表时间:2015-11-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏黑白安全

45种撸进后台的方法

2、到Google,搜索一些关键字,edit.asp? 韩国肉鸡为多,多数为MSSQL数据库! 

1.9K70
来自专栏java达人

武林外传—阿沅,这是依赖传递呀!

武三通最近收养了一个义女,叫阿沅,此女自幼父母双亡,十分孤苦,武三通对他一直疼爱有加,不光教她武术,还教她编程,想着日后等阿沅长大了,也可以当个程序媛什么的,作...

8330
来自专栏FreeBuf

首发 | Wannacry勒索软件母体主程序逆向分析(含临时解决方案自动化工具)

Wannacry勒索软件的背景大家都知道了,就是老美的重武器泄漏出来,结果被其他人捡了便宜所利用。类似这样的事情几年前我在以前的公司也做过,从国外弄来的高级样本...

29280
来自专栏Golang语言社区

高并发服务器的设计--内存池的设计

不同的业务,设计也不尽相同,但至少都一些共同的追求,比如性能。 做服务器开发很多年了,有时候被人问到,服务器性能是什么呢?各种服务器间拼得是什么呢? 简单的回答...

62870
来自专栏应兆康的专栏

QCloud_OCR 身份证识别 初探

今天给大家带来的是腾讯云的OCR文字识别,如何使用它来识别身份证。当然,它还可以识别名片,还有许多功能,喜欢研究的小伙伴可以深入深入。本教程采用了Python语...

1.5K50
来自专栏小白安全

小白博客 Windows最基本快捷键功能

今天要说的东西,可能不少朋友都会觉得太基础,或者不适用但是还会有不少朋友喜欢的 其实 Win 的快捷键有很多,甚至很多人还能自己把热键改成自己喜欢的。 ? 首先...

29150
来自专栏角落的白板报

【52ABP实战教程】0.1-- Devops如何用VSTS持续集成到Github仓库!

“ 工欲善其事,必先利其器。磨刀不误砍柴工!” 管理工具会VSTS。 代码管理会用GITHUB。 服务器会用Azure。 所有的东西都是利用现有服...

29990
来自专栏SAP最佳业务实践

SAP最佳业务实践:FI–应收帐款(157)-11 F-32手动清算客户帐户中的未清项目

4.12 F-32手动清算客户帐户中的未清项目 清算未清的客户项目。例如,如果要清算的项目余额不为零,则可以创建多付/付款不足的剩余项目。 客户帐户中的未清项...

45580
来自专栏FreeBuf

Python渗透测试工具都有哪些?

如果你热爱漏洞研究、逆向工程或者渗透测试,我强烈推荐你使用 Python 作为编程语言。它包含大量实用的库和工具,本文会列举其中部分精华。 网络 Scapy, ...

53580
来自专栏晨星先生的自留地

niushop任意文件上传1

27240

扫码关注云+社区

领取腾讯云代金券