您的位置:首页 > 移动开发

SmartWatch2开发——如何从手表端向手机端发消息

2013-12-11 21:35 645 查看
基本看完Sony提供的SmartWatch2的文档和Demo,仍然没有弄懂如何从手机向SmartWatch2主动发消息。

可以使用Notification从手机向SmartWatch 2主动发送消息,即:向Notification.Event.URI对应的ContentProvider中插入数据即可。虽然不是非常完美(我想发的是一个数据,比如文本、二进制流等等,而不是会让手表振动的Notification),但毕竟可以解决问题。

但如何从SmartWatch2向手机主动发送消息?没有Demo实现了这个功能,也没找到相关文档。只能通过反编译分析类似的应用,看看它们是如何实现的。

1. FindMyPhone简介

Find my phone是Sony开发的一款适用于SmartWatch2的app。下载并试用这个应用,发现它实现了SmartWatch2主动向手机端发送消息的功能。Find my phone使用场景很简单:用户忘了手机放在哪里,可以通过手表发起命令,让手机振动并响铃提醒。

安装Find my phone





SmartWatch2上启动Find my phone





点击左边的图标,手机开始响铃





手机响铃界面





2. FindMyPhone分析

2.1 反编译FindMyPhone

E:\apk_decompile>adb -s CB5124U78T pull /sdcard/Download/FindPhoneExtension_v1.0
.3.apk .
2350 KB/s (139584 bytes in 0.057s)

E:\apk_decompile>dex2jar-0.0.9.15\dex2jar.bat FindPhoneExtension_v1.0.3.apk
this cmd is deprecated, use the d2j-dex2jar if possible
dex2jar version: translator-0.0.9.15
dex2jar FindPhoneExtension_v1.0.3.apk -> FindPhoneExtension_v1.0.3_dex2jar.jar
Done.

用jd打开得到的jar文件,发现没有混淆,分析起来非常方便。

2.2. 功能分析

主要类





时序图





第1-5步: [手表端] 启动ControConfirmNewMan等待用户操作

第6-11步:[手表端] 启动ControlAlertNewMan

第12步: [手机端] Activity运行,振动并响铃

以上三步跟上面的图片正好对应。
FindMyPhone跟前面分析的几个Demo基本结构是一样的。所以这里不再赘述。

3. 总结

整体上,跟前面看的几个Demo没有什么区别。结合这个时序图,可以加深对以下几点的了解:

Find my phone本质上是运行在手机上的,所以才可以执行上面的第12步

ControlConfirmNewman和ControlAlertNewman继承自Sony的Control API中的ControlExtension。Control API的文档提到,ControlExtension可以显示在SmartWatch 2,并控制SmartWatch 2

第9步发送的广播是上述时序的关键,由这个广播联系SmartWatch 2和手机端

综上,如何在SmartWatch 2和手机之间发送消息其实非常简单:

SmartWatch 2向手机发送消息

直接发送Control API支持的Intent广播即可,或者使用Notification

手机向SmartWatch 2发送消息

发送Intent启动ExtensionService,由ExtensionService处理即可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  SmartWatch Extension