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

纵饮孤独 提交于 2019-12-03 15:42:22

基本看完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
    在此输入图片描述
  2. SmartWatch2上启动Find my phone
    first_page在此输入图片描述
  3. 点击左边的图标,手机开始响铃
    在此输入图片描述
  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. 功能分析

主要类

在此输入图片描述

时序图

在此输入图片描述

  • 第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处理即可

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!