SmartWatch2開發——如何從手錶端向手機端發消息

基本看完Sony提供的SmartWatch2的文檔和Demo,仍然沒有弄懂如何從手機向SmartWatch2主動發消息。app

能夠使用Notification從手機向SmartWatch 2主動發送消息,即:向Notification.Event.URI對應的ContentProvider中插入數據便可。雖然不是很是完美(我想發的是一個數據,好比文本、二進制流等等,而不是會讓手錶振動的Notification),但畢竟能夠解決問題。ide

但如何從SmartWatch2向手機主動發送消息?沒有Demo實現了這個功能,也沒找到相關文檔。只能經過反編譯分析相似的應用,看看它們是如何實現的。this

1. FindMyPhone簡介

Find my phone是Sony開發的一款適用於SmartWatch2的app。下載並試用這個應用,發現它實現了SmartWatch2主動向手機端發送消息的功能。Find my phone使用場景很簡單:用戶忘了手機放在哪裏,能夠經過手錶發起命令,讓手機振動並響鈴提醒。.net

  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文件,發現沒有混淆,分析起來很是方便。code

2.2. 功能分析

主要類blog

在此輸入圖片描述

時序圖繼承

在此輸入圖片描述

  • 第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處理便可

相關文章
相關標籤/搜索