劉 方
(安徽工商職業(yè)學(xué)院 電子信息系,安徽 合肥 231131)
基于Android的智慧家園綜合服務(wù)系統(tǒng)的設(shè)計(jì)
劉 方
(安徽工商職業(yè)學(xué)院 電子信息系,安徽 合肥 231131)
根據(jù)智慧小區(qū)建設(shè)的需求,設(shè)計(jì)和實(shí)現(xiàn)了基于Android的智慧家園綜合服務(wù)系統(tǒng)。該系統(tǒng)運(yùn)用Android技術(shù)與J2EE架構(gòu)的整合,采用C/S設(shè)計(jì),實(shí)現(xiàn)了社區(qū)公告、物業(yè)報(bào)修、物業(yè)繳費(fèi)、快遞收發(fā)、家政服務(wù)、公交查詢和生活超市等功能。該系統(tǒng)的建立有助于物業(yè)公司服務(wù)效率的提高,也給居民帶來(lái)新的智能生活方式體驗(yàn)。
智慧社區(qū);Android平臺(tái);J2EE分層結(jié)構(gòu);JSON;Sqlite 數(shù)據(jù)庫(kù)
隨著城鎮(zhèn)化推進(jìn),城市管理模式也在變革中提升。 “智慧社區(qū)”理念的提出,為社區(qū)治理模式和服務(wù)體系的創(chuàng)新,提供了新的思路。 “互聯(lián)網(wǎng)+公共服務(wù)”的社區(qū)管理服務(wù),有助于社區(qū)管理的智能化,有助于物業(yè)服務(wù)效率的提高,有助于“便捷、舒適、安全”社區(qū)生活環(huán)境的構(gòu)建,以及居民生活幸福感的獲得。
借助當(dāng)今移動(dòng)互聯(lián)網(wǎng)的飛速發(fā)展,以及個(gè)人移動(dòng)設(shè)備在社區(qū)居民中的廣泛普及,本文基于Android 技術(shù),實(shí)現(xiàn)了一款智慧家園綜合服務(wù)系統(tǒng),有針對(duì)性地為小區(qū)居民提供社區(qū)資訊及各式便民服務(wù),從而為融洽物業(yè)管理者、服務(wù)者、居住者三者之間關(guān)系,改善社區(qū)居民生活方式提供了方便。
(一)系統(tǒng)的體系結(jié)構(gòu)
智慧家園綜合服務(wù)系統(tǒng)采用Client/Server架構(gòu),主要由Web服務(wù)器、數(shù)據(jù)庫(kù)服務(wù)器、PC 端和移動(dòng)端組成。系統(tǒng)的物理架構(gòu)如圖1所示。
服務(wù)器端采用J2EE的分層結(jié)構(gòu)。分層體系使得Android 客戶端不需直接與后臺(tái)數(shù)據(jù)庫(kù)交互,而只要通過(guò)網(wǎng)絡(luò)與控制器組件交互,通過(guò)JSON數(shù)據(jù)交換格式,獲取服務(wù)器端返回的數(shù)據(jù)。后臺(tái)管理員通過(guò)PC管理端發(fā)布物業(yè)通知、社區(qū)新聞,小區(qū)活動(dòng)和家政服務(wù)等信息,社區(qū)居民則通過(guò)客戶端軟件進(jìn)行瀏覽和操作。系統(tǒng)的體系架構(gòu)如圖2所示。
圖1 系統(tǒng)應(yīng)用物理架構(gòu)
圖2 系統(tǒng)整體體系架構(gòu)
(二)系統(tǒng)功能結(jié)構(gòu)
智慧家園綜合服務(wù)系統(tǒng)以社區(qū)管理為基礎(chǔ), 以服務(wù)業(yè)主為核心,服務(wù)內(nèi)容涉及各項(xiàng)物業(yè)管理和多種便民服務(wù)。 (見圖3)
該系統(tǒng)具有以下功能:
1.用戶管理
用戶管理分為用戶登錄和密碼修改兩個(gè)子功能。
(1) 用戶登錄:用戶輸入相應(yīng)的登錄信息(用戶名、密碼),進(jìn)行系統(tǒng)登錄。用戶的類別有業(yè)主和物業(yè)管理員。
(2) 密碼修改:用戶用初始密碼登錄系統(tǒng)后,可以在“設(shè)置”按鈕中對(duì)密碼進(jìn)行修改操作。輸入原密碼和兩次新密碼,如果原密碼驗(yàn)證通過(guò),并且兩次新密碼輸入一致,就能成功修改密碼。
圖3 系統(tǒng)的功能結(jié)構(gòu)
2.物業(yè)管理
(1)物業(yè)通知:發(fā)布各種社區(qū)公告,及時(shí)通知業(yè)主,例如停水停電通知、小區(qū)新聞動(dòng)態(tài)、溫馨提醒資訊等,由物業(yè)公司通過(guò)管理后臺(tái)發(fā)布??蛻舳艘訪istView 列表視圖呈現(xiàn)出各通告或新聞的標(biāo)題、圖片及簡(jiǎn)介,單擊列表中某一項(xiàng)后,可以查看相應(yīng)詳細(xì)信息。
(2)物業(yè)報(bào)修:業(yè)主可以通過(guò)在線進(jìn)行報(bào)修,還可以通過(guò)拍照的方式把要報(bào)修的內(nèi)容傳到物業(yè)中心,讓物業(yè)及時(shí)地處理。
(3)繳費(fèi)賬單:可以進(jìn)行當(dāng)期物業(yè)費(fèi)、停車費(fèi)、水電費(fèi)等查詢、歷史繳費(fèi)查詢等。支持微信和支付寶在線繳費(fèi)。
(4)快遞收發(fā):為業(yè)主提供快遞收發(fā)服務(wù),通過(guò)平臺(tái)及時(shí)發(fā)送信息,方便業(yè)主下班來(lái)取。
(5)投訴建議:可在線對(duì)社區(qū)信息進(jìn)行咨詢,提出意見和建議。
3.生活服務(wù)
(1)公交查詢:包括公交線路查詢、站點(diǎn)查詢。
(2)家政服務(wù):可查看經(jīng)過(guò)小區(qū)物業(yè)認(rèn)證的社區(qū)家政服務(wù)人員信息;提供新居開荒及家庭保潔服務(wù)。
(3)生活超市:為業(yè)主提供周邊商家各類超級(jí)特惠商品展示,給業(yè)主實(shí)惠,為商家促銷。
(4)更多服務(wù):提供小區(qū)周邊的各類生活服務(wù)信息黃頁(yè),(如周邊餐飲外賣、衣物干洗、廢品回收、開鎖換鎖、物流搬家等),方便熱線電話查詢并可一鍵撥號(hào)。
(一)客戶端與服務(wù)器端數(shù)據(jù)交互
Android客戶端與服務(wù)端之間的數(shù)據(jù)交換格式,目前較理想的是JSON,它語(yǔ)法簡(jiǎn)單,易于解析和生成,且傳輸效率高。
在本系統(tǒng)中,Android與服務(wù)器間通信,采用了 HTTP 協(xié)議作為通信橋梁。由于網(wǎng)絡(luò)請(qǐng)求是比較耗時(shí)的操作,為此使用了異步HTTP和JSON相結(jié)合的方式來(lái)實(shí)現(xiàn)數(shù)據(jù)傳輸。
異步HTTP主要是通過(guò)android-async-http來(lái)處理對(duì)服務(wù)器的異步網(wǎng)絡(luò)請(qǐng)求的。Http異步請(qǐng)求均在UI(主)線程之外執(zhí)行,通過(guò)回調(diào)方式來(lái)處理從服務(wù)器端返回的數(shù)據(jù)。
android-async-http是基于Apache的HttpClient基礎(chǔ)上的,一個(gè)開源的異步網(wǎng)絡(luò)請(qǐng)求處理框架。該框架提供了一個(gè)RequestParams類,用于封裝參數(shù)處理,具體實(shí)現(xiàn)中,數(shù)據(jù)傳輸?shù)闹饕鞒虨椋?/p>
首先調(diào)用getrequestParams方法,把客戶端輸入的信息進(jìn)行封裝,產(chǎn)生一個(gè)鍵-值對(duì)形式的RequestParams數(shù)組。調(diào)用post方法,向服務(wù)器端發(fā)送異步數(shù)據(jù)。在服務(wù)器端,從HttpServletRequest中獲得客戶端傳來(lái)的請(qǐng)求數(shù)據(jù);對(duì)數(shù)據(jù)讀取處理后,將需要返回的內(nèi)容封裝成JSON對(duì)象,使用HttpServletRespone發(fā)送至客戶端;客戶端接收到返回內(nèi)容JSON對(duì)象,將其解析成所需的數(shù)據(jù)格式并正確顯示。異步HTTP實(shí)現(xiàn)過(guò)程如圖4所示。
圖4 異步HTTP交互過(guò)程
實(shí)現(xiàn)系統(tǒng)前后端數(shù)據(jù)的交互,JSON作用顯得尤為重要。為了使得Java 對(duì)象和 JSON 數(shù)據(jù)互相轉(zhuǎn)換的操作更為簡(jiǎn)便,本項(xiàng)目中利用了JSON-lib包相關(guān)的JSONArray 、JSONObject類來(lái)實(shí)現(xiàn)。
以用戶(業(yè)主)登錄模塊為例,服務(wù)端在處理完客戶端數(shù)據(jù)后,需要將返回內(nèi)容封裝成JSON對(duì)象,方法實(shí)現(xiàn)為:創(chuàng)建JSONArray對(duì)象,把Owner對(duì)象封裝,put()方法在JSONObject對(duì)象中放入名為“result”的JSONArray對(duì)象。定義makeOwnertoJSON方法,傳入Owner對(duì)象,返回JSONObject對(duì)象,即實(shí)現(xiàn)返回內(nèi)容的JSON封裝。代碼如下:
private JSONObject makeOwnertoJSON
(Owner o,String type){
JSONObject r = new JSONObject();
if(type.equals("業(yè)主")){
JSONArray jsonArray = new
JSONArray();
Owner owner = new Teacher();
owner.setTName(t.getTName());
owner.setTPassword(t.getTPassword());
oOwner.setTId(t.getTId());
jsonArray = JSONArray.fromObject
(owner);
r.put("result", jsonArray);
}
return r;
}
客戶端接收到服務(wù)器的返回內(nèi)容JSON對(duì)象,需要將返回內(nèi)容解析成所需的數(shù)據(jù)格式,下面對(duì)JSON數(shù)據(jù)的解析調(diào)用了getOwnerFromJSON方法。
代碼如下:
//把返回內(nèi)容解析成Owner對(duì)象
private Ownerr getOwnerFromJSON
(JSONObject object){
Owner owner = new Owner ();
if (object != null && !object.equals("")) {
owner.setTName(object.optString("TName"));
owner.setTPassword(object.optString
("TPassword"));
owner.setTId(object.optInt("TId"));
}
return owner;
}
(二)系統(tǒng)數(shù)據(jù)庫(kù)的設(shè)計(jì)
服務(wù)器端采用的數(shù)據(jù)庫(kù)是MySQL。根據(jù)系統(tǒng)功能分析,設(shè)計(jì)了業(yè)主用戶信息表、報(bào)修記錄表、繳費(fèi)賬單表、物業(yè)通知表、快遞信息表、投訴建議表、家政服務(wù)表、商品目錄表、商家電話表等系列數(shù)據(jù)庫(kù)表,用來(lái)滿足系統(tǒng)對(duì)數(shù)據(jù)存儲(chǔ)和處理的要求??蛻舳瞬捎肁ndroid內(nèi)嵌的Sqlite 數(shù)據(jù)庫(kù)來(lái)進(jìn)行數(shù)據(jù)的存儲(chǔ)和管理。在本系統(tǒng)的登錄功能模塊實(shí)現(xiàn)中,要將己通過(guò)服務(wù)器端驗(yàn)證合法的用戶名和密碼存放在客戶端,需建立Sqlite 數(shù)據(jù)庫(kù)進(jìn)行本地化存取。
實(shí)現(xiàn)用戶登錄信息SQLite存儲(chǔ)的過(guò)程如下:
首先定義一個(gè)名為“db”的SQLiteDatabase對(duì)象,使用Android提供的SQLiteDatabase類的靜態(tài)方法,打開或創(chuàng)建SQLite數(shù)據(jù)庫(kù):
db=SQLiteDatabase.openOrCreateDatabase(this.getFilesDir().toString() + "/ Community user.db3", null);上述代碼即創(chuàng)建了“Community user”SQLite數(shù)據(jù)庫(kù)。
然后通過(guò)編寫SQL語(yǔ)句建立 “user_info用戶信息表”。該數(shù)據(jù)表屬性列為:id (主鍵且自動(dòng)增加)、user_name(用戶名)、user_password(密碼)、user_type(類別)等字段。
接下來(lái)就可以調(diào)用SQLiteDatabase對(duì)象提供的相關(guān)方法,完成對(duì)數(shù)據(jù)庫(kù)的操作。
下面是通過(guò)添加insertData()方法,實(shí)現(xiàn)將已經(jīng)登錄的用戶信息存入這個(gè)表中。
private void insertData(SQLiteDatabase db,String name,String password,String type){
String sql = "insert into user_info values(null,?,?,?)";
db.execSQL(sql, new String []{name,password,type});
}
用戶信息SQLite存儲(chǔ)后,當(dāng)再次登錄時(shí),由于已將合法的用戶名和密碼存放在客戶端,用戶就可方便地登錄了,而不需要再重新去訪問(wèn)服務(wù)器端,將輸入的用戶信息與服務(wù)器數(shù)據(jù)庫(kù)進(jìn)行匹配驗(yàn)證了。
(三)手機(jī)移動(dòng)地圖技術(shù)
為方便小區(qū)居民出行,本系統(tǒng)提供了“公交查詢”模塊。該功能主要是通過(guò)調(diào)用百度地圖SDK提供的MKSearch類來(lái)實(shí)現(xiàn)二次開發(fā)的。
其實(shí)現(xiàn)過(guò)程為:在申請(qǐng)獲得使用百度地圖移動(dòng)版的API Key后,接著在Eclipse中進(jìn)行地圖SDK的工程配置。為了使用網(wǎng)絡(luò)和GPS設(shè)備,另需在應(yīng)用程序的AndroidManifest中添加相應(yīng)的權(quán)限和應(yīng)用程序的配置信息,并進(jìn)行全局Application的初始化,然后即可使用百度地圖SDK的功能進(jìn)行開發(fā)了。
具體實(shí)現(xiàn)步驟:首先創(chuàng)建MKSearch對(duì)象,并初始化MKSearch對(duì)象;為搜索按鈕添加事件監(jiān)聽器,該監(jiān)聽器用于返回poi(位置、關(guān)鍵點(diǎn))搜索、公交搜索、駕乘路線和步行路線結(jié)果。使用poiSearchInCity()方法搜索城市信息,從onGetPoiResult()方法中返回所有poi信息,然后獲取公交線路poi信息。下面是部分關(guān)鍵代碼:
public void onGetPoiResult(MKPoiResult arg0,
int arg1, int arg2) {
// TODO Auto-generated method stub
if (arg2 != 0 || arg0 == null) {
Toast.makeText(mContext, "對(duì)不起,
沒(méi)有相應(yīng)結(jié)果",
Toast.LENGTH_LONG).show();
return;
}
MKPoiInfo curPoiInfo = null;
int totalPoiNum = arg0.getCurrentNumPois();
busLineIDList.clear();
for (int i = 0; i < totalPoiNum; i++) {
if (2 == arg0.getPoi(i).ePoiType) {
curPoiInfo = arg0.getPoi(i);
busLineIDList.add(curPoiInfo.uid);
}
}
if (curPoiInfo == null) {
Toast.makeText(mContext, "對(duì)不起,
沒(méi)有相應(yīng)結(jié)果",
Toast.LENGTH_LONG).show();
return;
}
mBDMKSearch.busLineSearch ("合肥",
busLineIDList.get(0));
}
接下來(lái),再調(diào)用BusLineSearch()方法,根據(jù)poi信息來(lái)搜索公交路線詳細(xì)信息;并使用RouteOverlay在地圖上繪制一條公交詳情路線,最后刷新地圖。
(四)Camera功能的調(diào)用和開發(fā)
在“物業(yè)報(bào)修”模塊中,業(yè)主可以通過(guò)“文字描述”和“現(xiàn)場(chǎng)拍照上傳至服務(wù)器”方式,實(shí)現(xiàn)在線報(bào)修。該功能的實(shí)現(xiàn),涉及Camera功能的開發(fā),以及媒體文件的上傳至網(wǎng)絡(luò)服務(wù)器。其實(shí)現(xiàn)過(guò)程解析如下:
1.Camera的使用和開發(fā):首先在AndroidMainfest.xml文件中,申明要使用拍攝功能并取得存儲(chǔ)權(quán)限,然后編寫相關(guān)代碼:(1)構(gòu)造一個(gè)Camera Intent ,創(chuàng)建一個(gè)拍攝照片的Intent;(2)通過(guò)執(zhí)行startActivityForResult()來(lái)開啟Camera intent;(3)保存圖片到本地SD卡中;(4)建立一個(gè)onActivityResult()方法,接收來(lái)自系統(tǒng)Camera程序的執(zhí)行結(jié)果。
2.照片上傳至服務(wù)器:(1)首先創(chuàng)建線程來(lái)連接服務(wù)器,通過(guò)處理異步Http請(qǐng)求來(lái)實(shí)現(xiàn);其核心方法為: FileUtil.post(requestUrl, params, formfile);其中requestUrl:上傳路徑; params:請(qǐng)求參數(shù); formfile:上傳的文件。(2)把上傳的文件按照 HTTP 協(xié)議格式封裝,通過(guò)HTTP協(xié)議提交數(shù)據(jù)到服務(wù)器: outStream.write(textEntity.toString().getBytes()); (3)執(zhí)行上傳操作后,接下來(lái)在服務(wù)器上實(shí)現(xiàn)文件流的接收和數(shù)據(jù)保存;(4)最后在數(shù)據(jù)庫(kù)中添加相應(yīng)的記錄。
圖5 主頁(yè) 圖6 物業(yè)通知界面 圖7 快遞代收界面 圖8 生活超市界面
(五)客戶端的界面設(shè)計(jì)
在“智慧家園”整體布局中,各主要功能界面框架風(fēng)格基本相似,頂部為 “智慧家園客戶端”項(xiàng)目標(biāo)題欄,標(biāo)題欄下是一個(gè)“小區(qū)景觀圖片的動(dòng)態(tài)展示窗口”。
該“小區(qū)圖片動(dòng)態(tài)展示窗口”設(shè)計(jì)為一個(gè)小的長(zhǎng)條,放在項(xiàng)目標(biāo)題之下,它既可以美化軟件界面(或作為廣告植入),也不會(huì)影響用戶正常使用系統(tǒng)的功能。
由于系統(tǒng)多個(gè)界面都有“小區(qū)景觀動(dòng)態(tài)展示窗口“,因此我們將項(xiàng)目標(biāo)題欄和展示窗口做成了一個(gè)公共的布局(title.xml),來(lái)供其它布局進(jìn)行引用。引用該布局很簡(jiǎn)單,只要使用
對(duì)于“展示窗口”的處理,采取的是將其定義為一個(gè)播放控件類AdView,定義出它加載圖片的方法,讓其在固定的時(shí)間間隔內(nèi)不斷地刷新循環(huán)顯示圖片,以增加軟件的可看性。
客戶端的部分界面布局效果如圖5~8所示。
本系統(tǒng)設(shè)計(jì)了基于Android的智慧家園綜合服務(wù)系統(tǒng),借助Android智能終端便攜和強(qiáng)大網(wǎng)絡(luò)功能的優(yōu)勢(shì),為小區(qū)居民提供了社區(qū)資訊及各種便民服務(wù),有助于物業(yè)公司服務(wù)效率的提高,給居民帶來(lái)新的現(xiàn)代生活方式體驗(yàn)。該系統(tǒng)在社區(qū)建設(shè)方面有較好的應(yīng)用價(jià)值。
[1]辜勝阻.智慧城市建設(shè)的理論思考與戰(zhàn)略選擇[J].中國(guó)人口·資源與環(huán)境,2012, (5) :76~80.
[2]李剛. 瘋狂Android講義[M].北京:電子工業(yè)出版社,2011.
[3]馮艷紅,何加銘,楊任爾,等.基于Android技術(shù)的社區(qū)服務(wù)系統(tǒng)設(shè)計(jì)[J].移動(dòng)通信,2015,(5): 90~93.
[4]王衛(wèi)紅.Android應(yīng)用開發(fā)基礎(chǔ)教程[M].北京:機(jī)械工業(yè)出版社,2015.
[5]阮昆,王勉.基于Android 的高校招生就業(yè)工作信息平臺(tái)的研究與設(shè)計(jì)[J].計(jì)算機(jī)應(yīng)用與軟件,2015, (9) :219~222.
[6]張愛鳳,鞏秀鋼,王榮,等.基于Android 的智慧小區(qū)管理系統(tǒng)[J].電腦知識(shí)與技術(shù),2015,(15):69~71.
[7]萬(wàn)明,李娟娟.基于Android 的社區(qū)信息管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2014,(3):561~563.
[8]鐘元生.Android開發(fā)案例教程[M].北京:清華大學(xué)出版社,2015.
2095-4654(2016)12-0075-05
2016-11-04
TP311.52
A
湖北科技學(xué)院學(xué)報(bào)2016年12期