引擎不但可外掛,還可多顆喔。
網路伺服器 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/家庭雲