摘 要: 在深入分析Android的系統(tǒng)架構(gòu)及其應(yīng)用程序組成的基礎(chǔ)上,,設(shè)計和實現(xiàn)了一款基于Android的智能家居終端。終端主要包括主控制模塊,、信號處理模塊,、網(wǎng)絡(luò)管理模塊、媒體流管理模塊及信息存取模塊等功能模塊,。較好地融合了Android與智能家居終端,,具有較強的實用價值和開發(fā)指導(dǎo)意義。
關(guān)鍵詞: 智能家居,;Android系統(tǒng),;家居安防;可視對講,;智能終端
自2007年Google推出開源手機操作系統(tǒng)Android以來,,Android的應(yīng)用開發(fā)一時間風(fēng)靡全球,各高科技領(lǐng)域應(yīng)用都在向Android進軍,。Android的盛行取決于其獨特的優(yōu)勢,。首先,Android是一款基于Linux內(nèi)核的開源系統(tǒng),,它具有操作系統(tǒng),、中間件和關(guān)鍵應(yīng)用程序。對第三方應(yīng)用開發(fā)完全開放,、人員具有較大的自由度[1],。其次,Android應(yīng)用程序的開發(fā)采用Java語言,通過應(yīng)用框架層提供的API,,開發(fā)簡單,、周期短。第三,,Android具有很強的開放性和靈活性,。雖然現(xiàn)在市場上已經(jīng)出現(xiàn)各種各樣的智能家居終端,但Android的出現(xiàn)及其廣泛應(yīng)用,,使得很多智能家居廠商正投入很大的人力物力進行研究開發(fā)基于Android的智能家居終端,。
1 Android系統(tǒng)
1.1 Android架構(gòu)
Android是一個包括操作系統(tǒng)、中間件和關(guān)鍵應(yīng)用程序的移動設(shè)備軟件堆,。其作為一個開發(fā)式的系統(tǒng)平臺,,包含了眾多的功能和龐大的基于Linux的代碼,在用戶空間又分為本地代碼(C/C++)和Java代碼,。Android系統(tǒng)可以分為以下各層次:
自底向上依次為Linux操作系統(tǒng)及其驅(qū)動層,、本地代碼框架和Java虛擬機層、Java框架層和Java應(yīng)用程序?qū)覽2],。在各層之間存在相應(yīng)的分界線接口。如圖1所示,。
作為開放式的系統(tǒng),,Android提供了豐富的組件和視圖控件。大部分的開發(fā)只需要調(diào)用Android應(yīng)用框架層提供的API就可以方便地完成,,并且在Android的SDK中提供了豐富的實例供參考學(xué)習(xí),,使得應(yīng)用開發(fā)簡單易行。Android各層次的功能如表1所示,。
1.2 Android應(yīng)用程序的組成
一個程序可以調(diào)用另外一個程序的程序片段,。這是Android程序框架的基本設(shè)計理念。例如,,在Windows操作系統(tǒng)中,,資源管理器可以瀏覽圖片文件,當(dāng)瀏覽到這個圖片文件時,,雙擊該圖片文件,,便啟動圖片瀏覽軟件。Android的程序理念便是如此,所不同的是,在Windows中,,打開圖片會啟動圖片瀏覽軟件的全部功能,,雖然實際上只是需要查看圖片;Android中是把一個程序的功能分為各種不同的程序片段,每個程序片段都能單獨啟動,。
Android應(yīng)用程序由Activity,、Service、Broadcast Receiver和Content Provider四大組件構(gòu)成,。這四大組件也稱為Android的四種類型的程序片段,,且每種類型都可以獨立運行,。
Activity在四大組件中最復(fù)雜。從視覺上看,,一個Activity占據(jù)當(dāng)前的窗口,,響應(yīng)所有窗口事件,具有控件,、菜單等界面元素,,為用戶提供一個與界面交互的平臺。從內(nèi)部邏輯來看,,Activity需要為了保持各個界面狀態(tài),,需要做很多持久化的工作,還需要妥善管理生命周期和一些轉(zhuǎn)跳邏輯,。
Service就是剝離了界面的Activity,,都是封裝有一個完整的功能邏輯實現(xiàn),只不過Service不拋頭露臉,,默默提供后臺服務(wù),。舉例,當(dāng)用戶處理其他問題時,,服務(wù)可以播放背景音樂,,或者可以從網(wǎng)上獲取數(shù)據(jù)、計算,、提高,,提供給活動所需要的結(jié)果。
Broadcast Receiver只能接收廣播,,一個廣播可以有很多廣播接收器對它認(rèn)為重要的通知作出反應(yīng),。Android系統(tǒng)提供了一個sendBroadcast()方法,Application Framework內(nèi)部調(diào)用該方法發(fā)送廣播,,比如有新短信息,、有來電等廣播消息,Broadcast Receiver會響應(yīng)這些系統(tǒng)消息的獨立執(zhí)行單元[4],。
Content Provider提供了一套特殊的可供其他應(yīng)用使用的數(shù)據(jù),。這些數(shù)據(jù)可以存儲在文件系統(tǒng)中、SQLite數(shù)據(jù)庫中或者其他有意義的形式,。實現(xiàn)了一套標(biāo)準(zhǔn)的允許其他用戶檢索,、儲存數(shù)據(jù)的方法。通過使用ContentProvider的實例,,調(diào)用它的方法,。
Intent是Android中一個特殊的類,組件之間的通訊,由Intent協(xié)助完成,。Intent負(fù)責(zé)對應(yīng)用中一次操作的動作,、動作涉及數(shù)據(jù)、附加數(shù)據(jù)進行描述,,Android則根據(jù)此Intent的描述,,負(fù)責(zé)找到對應(yīng)的組件,將 Intent傳遞給調(diào)用的組件,,并完成組件的調(diào)用,。Intent在這里起著實現(xiàn)調(diào)用者與被調(diào)用者之間的解耦作用,如圖2所示,。
2 智能家居終端
2.1 終端主要功能
智能家居終端的主要功能如下[5]:
(1)可視對講,。室內(nèi)機與門口機進行可視對講;室內(nèi)機可以監(jiān)視門口情況,;訪客留影,;兩個或多個室內(nèi)機進行視頻對話。
(2)家居安防,。防區(qū)設(shè)定:對室內(nèi)和室外安裝的監(jiān)視器進行獨立的設(shè)定,;報警:監(jiān)視器偵測到異常發(fā)出報警;家居安防模式設(shè)定:外出,、在家,、就寢等。
(3)家居控制,。燈光控制;窗簾控制,;空調(diào)控制,;電源控制;燃?xì)忾y控制,;電梯控制,。
(4)生活資訊。天氣預(yù)報,;萬年歷,;常用電話;物業(yè)服務(wù),。
(5)系統(tǒng)管理,。常用設(shè)置;使用說明,;安防設(shè)置,;家居設(shè)置。
系統(tǒng)結(jié)構(gòu)功能如圖3所示。
2.2 軟件系統(tǒng)架構(gòu)
整個軟件系統(tǒng)架構(gòu)分為四個層次,,每個層次的功能分別如下:
(1)操作系統(tǒng)層,。對下為各種硬件設(shè)備提供外圍設(shè)備驅(qū)動,控制硬件工作,,如音視頻的采集播放設(shè)備,、各類傳感器、攝像頭等,;對上為庫函數(shù)提供各種設(shè)備的驅(qū)動接口,,以使得上層可以調(diào)用設(shè)備。
(2)庫和接口層,。該主要提供給應(yīng)用框架層一些基本的類庫和接口,,包括Android的C/C++庫、RTP/RTCP庫和多媒體的處理接口,。
(3)應(yīng)用框架層,。該層采用模塊化開發(fā)方法,通過使用其下層的函數(shù)庫提供的接口,,將實現(xiàn)相同或相似功能的封裝成為一個模塊進而供應(yīng)用層來開發(fā)使用,。
(4)應(yīng)用層。通過與應(yīng)用框架層提供的模塊相互交互,、資源分配等,,基于Android的四大組件及其他相關(guān)視圖控件完成界面設(shè)計,為用戶提供一個可視的界面平臺,。在該軟件架構(gòu)下,,涉及到的功能模塊有信號處理模塊、網(wǎng)絡(luò)管理模塊,、媒體流管理模塊以及信息存取模塊,。
2.3 功能模塊的實現(xiàn)
2.3.1 主控制模塊
最上層為主控制模塊,是系統(tǒng)的主要模塊,,通過使用Android的各種組件和控件,,在應(yīng)用層實現(xiàn)系統(tǒng)的主要功能。一方面,,通過 Android的資源文件如布局,、菜單、視圖等提供的各種類和方法來完成系統(tǒng)的GUI設(shè)計,,提供給用戶一個統(tǒng)一的圖形化接口給用戶,。另一方面,通過使用應(yīng)用框架中的信號處理,、網(wǎng)絡(luò)管理,、媒體流管理,、信息存儲等功能模塊接口,分別實現(xiàn)門磁控制,、家居安防,、家居控制、生活資訊,、可視對講及系統(tǒng)管理的功能,。在此模塊中的門磁控制可以直接控制房門的開關(guān)[6]。
所有的功能都聚集在主模塊中,,這就需要一個合理的布局才能使系統(tǒng)使用起來比較協(xié)調(diào),。由于每個Activity中包含一個Window,每個Window中包含一個View Group,,而每個View Group中包含更多的View和View Group,。在主模塊中的布局如圖4所示。
2.3.3 網(wǎng)絡(luò)管理模塊
網(wǎng)絡(luò)管理模塊主要為生活資訊提供服務(wù),。此模塊提供服務(wù)的分為兩種,。一種為局域網(wǎng)服務(wù),如物業(yè)服務(wù),。這里實現(xiàn)起來比較簡單,,用戶根據(jù)系統(tǒng)所提供的設(shè)備名稱向中心管理機報備需要服務(wù)的設(shè)備。例如:點擊某個設(shè)備,,終端向中心管理機發(fā)送一條“智能設(shè)備需要服務(wù)”指令,。物業(yè)收到該指令后,會主動聯(lián)系該用戶,。另一種為Intenet服務(wù),,需要提供各種信息的Web服務(wù),如天氣,。
2.3.4 媒體流管理模塊
媒體流管理模塊是為可視對講提供服務(wù)的,。在系統(tǒng)中通過調(diào)用Android的OpenCORE接口來實現(xiàn)音視頻的編解碼。OpenCORE是Android多媒體框架的核心,,所有Android平臺的音頻、視頻的采集以及播放等操作都是通過它來實現(xiàn)的,。它主要包含了兩個大方面的內(nèi)容:
PVPlayer:提供媒體播放器的功能,,完成各種音頻、視頻流的回放功能,。
PVAuthor:提供媒體流記錄的功能,,完成各種音頻、視頻流以及靜態(tài)圖像的捕獲功能,。
當(dāng)門口機需與室內(nèi)機請求對講時,,室內(nèi)機只需要對門口機傳輸過來的音視頻進行解碼播放,即Android調(diào)用MediaPlayer類用來播放音頻,、視頻。
當(dāng)兩個室內(nèi)機進行視頻對講時,,雙方機器要同時進行音視頻的編碼解碼,。這時就要同時調(diào)用MediaPlayer類和MediaRecorder類。MediaRecorder類用來進行媒體采樣,,包括音頻和視頻,。
2.3.5 信息存取模塊
信息存取模塊主要為系統(tǒng)管理提供開發(fā)接口以實現(xiàn)對系統(tǒng)的管理。如智能家居系統(tǒng)的終端系統(tǒng)管理模塊主要提供本機設(shè)置,、安防設(shè)置,、家居設(shè)置、使用幫助等功能,。本機設(shè)置包括本機的網(wǎng)絡(luò)設(shè)置,、樓棟單元號房間號設(shè)置、密碼設(shè)置等,;安防設(shè)置可以對室內(nèi)的各個安防設(shè)備進行布防和撤防設(shè)置,;家居設(shè)置則可以調(diào)整家用電器的斷電或啟動時間;使用幫助則是關(guān)于本機的使用說明,。設(shè)置的一般過程為先通過相應(yīng)的get方法獲得要設(shè)置的狀態(tài),,然后通過set方法保存設(shè)置。
2.4 模塊封裝
本文開發(fā)是按照Android開發(fā)規(guī)范進行,,應(yīng)用層使用Java語言,,在底層的一些本地庫和接口開發(fā)過程中,考慮到代碼的使用效率及開發(fā)的簡易性,,采用了JNI,,是由C/C++語言實現(xiàn)的。如圖6為實現(xiàn)效果圖,。
整個系統(tǒng)充分利用了Android內(nèi)部資源,,極大地提高了開發(fā)效率。測試結(jié)果表明系統(tǒng)的穩(wěn)定性極高,,具有較強的實用性,。
參考文獻
[1] 邵長彬,張重陽,,鄭世寶.基于Android的可視IP電話多媒體終端設(shè)計與實現(xiàn)[J].電視技術(shù),,2011,3(6):62-65.
[2] 柯元旦,,宋銳.Android程序設(shè)計[M].北京:北京航空航天大學(xué)出版社, 2010:12-35.
[3] 尹浩,,陳美鑾,黎飄.基于FPSLIC的網(wǎng)絡(luò)家居終端系統(tǒng)的設(shè)計與實現(xiàn)[J].計算機工程與設(shè)計,2006,27(8):1442-1445.
[4] 楊豐盛.Android應(yīng)用開發(fā)揭秘[M].北京:機械工業(yè)出版社,2009:188-219.
[5] 金鑫.基于ARM-Linux的智能家居網(wǎng)絡(luò)終端的設(shè)計與實現(xiàn)[J].電腦知識與技術(shù), 2010,6(7):1612-1618.
[6] 宋小青,,周東升.基于Android平臺的應(yīng)用開發(fā)研究[J].軟件導(dǎo)刊,2011,10(2):104-106.