iT邦幫忙

DAY 13
1

Android 實現智慧生活 DIY系列 第 13

實現智慧家庭diy (Day13) - Android APP 化身為智慧家庭雲的外掛引擎

引擎不但可外掛,還可多顆喔。

網路伺服器 WEB SERVER 很適合作為通用的服務入口,它可接受通用的資料型態,我們的 WEB APP 擺在裡面 ,這WEB APP 則擔任服務引擎的前置與後置處理作業,例如 將處理結果,做成HTML格式,傳送給使用者的手機。WEB APP 後面可接相關地 APP。由APP 扮演處理引擎。不過前面的 WEB APP與後面的 APP 如何銜接呢 ? 別忘了, 兩個可是異質的喔。

所有文章
http://ithelp.ithome.com.tw/category/家庭雲
我們的應用情境是,使用者拿起手機,進入家庭雲的頁面。接著選擇 查詢電燈狀態,便回報家裡電燈狀態,回報方式為,顯示電燈狀態在使用者手機。
如何做呢? 由於這個例子,程式稍大,類別較多,請容我今天先做要點提示, 明天講解完整程式碼。
在開始之前 ,若你不清楚 如何 用i-jetty 並在手機寫一個 WEB APP,請參考 我 Day4 - Day6 的 PO 文。

1.寫一個 APP 裡面有一個 Remote Service(若是 Remote Service,你大概還要一個Binder 的類),在此先假設你會寫這個, 這個Service 提供一個函式(如果你寫過,你應該知道它是onTransact())讓 WEB APP 呼叫。 如下二圖 Zigbee Remote Service 程式碼
2.Service 的函式被呼叫後,再呼叫Zigbee 廠商提供的API,查詢電燈狀態。
不難吧。

不過,你有無 懷疑 "WEB APP 如何能呼叫 Service的函式 ?"是的,這是最先要被克服的。
答案是 i-jetty 提供一個 Context 讓我們的WebAPP 能啟動 Service. 為何i-jetty 能提供 WebAPP Context 的參考,很簡單,因為 i-jetty 本身是一個帶Activity 的APP。
我們昨天提到 Activity有一函式叫 getContext(), 它就能取得 Context啦. 如下圖 Servlet程式碼。

我們昨天有特別介紹 Context 和四大AP 元件,經由i-Jetty 取得Context , 我們就可在WebAPP 使用 Context 裡的BindService()及StartService() 這兩個函式, 已啟動後面的 ZigBee Service了。

還有一點,為何須為Remote Service ? 因為 WebApp 與 i-jetty在相同 進程,而 Zigbee Service所在的APP在另一進程,兩者是必須跨進程 通訊。所以 WEB APP裡呼叫Zigbee Service是用 transact(), 由Android 的 Binder System 呼叫 Service 的onTransact()。

所有文章
http://ithelp.ithome.com.tw/category/家庭雲


上一篇
實現智慧家庭diy (Day12) - 為何寫Android APP 不能用 new 來建立 Activity。
下一篇
實現智慧家庭diy (Day14) – 實現智慧家庭雲的服務引擎 之 架構剖析 - (上)
系列文
Android 實現智慧生活 DIY30

尚未有邦友留言

立即登入留言