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

基本看完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使用场景很简单:用户忘了手机放在哪里,可以通过手表发起命令,让手机振动并响铃提醒。

  1. 安装Find my phone

    SmartWatch2开发——如何从手表端向手机端发消息_第1张图片
  2. SmartWatch2上启动Find my phone

    SmartWatch2开发——如何从手表端向手机端发消息_第2张图片
  3. 点击左边的图标,手机开始响铃

    SmartWatch2开发——如何从手表端向手机端发消息_第3张图片
  4. 手机响铃界面

    SmartWatch2开发——如何从手表端向手机端发消息_第4张图片

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. 功能分析

主要类


SmartWatch2开发——如何从手表端向手机端发消息_第5张图片

时序图


SmartWatch2开发——如何从手表端向手机端发消息_第6张图片

  • 第1-5步: [手表端] 启动ControConfirmNewMan等待用户操作
  • 第6-11步:[手表端] 启动ControlAlertNewMan
  • 第12步: [手机端] Activity运行,振动并响铃

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

3. 总结

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

  1. Find my phone本质上是运行在手机上的,所以才可以执行上面的第12步
  2. ControlConfirmNewman和ControlAlertNewman继承自Sony的Control API中的ControlExtension。Control API的文档提到,ControlExtension可以显示在SmartWatch 2,并控制SmartWatch 2
  3. 第9步发送的广播是上述时序的关键,由这个广播联系SmartWatch 2和手机端

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

  • SmartWatch 2向手机发送消息
    直接发送Control API支持的Intent广播即可,或者使用Notification
  • 手机向SmartWatch 2发送消息
    发送Intent启动ExtensionService,由ExtensionService处理即可

你可能感兴趣的:(extension,SmartWatch)