劉寬++譚大禹
摘要:移動(dòng)互聯(lián)網(wǎng)的出現(xiàn),極大的方便了人們的衣食住行,同時(shí)人們當(dāng)下對(duì)行車(chē)安全非常看重,因此設(shè)計(jì)一款智能行車(chē)記錄儀APP便可以解決行車(chē)安全中的一些需求,如有效地解決了事故發(fā)生時(shí)的證據(jù)資料不足問(wèn)題。該應(yīng)用系統(tǒng)集用戶登錄、路徑規(guī)劃、文件管理、音樂(lè)播放等功能于一體,充分滿足了行車(chē)過(guò)程中的對(duì)事故資料、路線導(dǎo)航和娛樂(lè)的需要。
關(guān)鍵詞:移動(dòng)互聯(lián)網(wǎng);行車(chē)記錄;APP;路徑導(dǎo)航;文件管理
中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2017)03-0211-04
Design and Implementation of Intelligent Traffic Recorder Based on Android
LIU Kuan,TAN Da-yu
(Anhui University Of Science And Technology, College of computer science and Engineering, Huainan 232001, China)
Abstract: The emergence of the mobile Internet, a great convenience to people's basic necessities of life, while the people present on the traffic safety is very important, so the design of an intelligent recorder APP can solve some traffic safety needs, such as to effectively solve the problem of insufficient evidence of information at the time of the accident. The application system integrates user login, path planning, file management, music playback and other functions in one, fully meet the needs of traffic accident data, route navigation and entertainment.
Key words: Mobile Internet; traffic record; APP; route guidance; file management
1 背景
隨著我國(guó)社會(huì)經(jīng)濟(jì)的不斷發(fā)展,交通運(yùn)輸業(yè)得到了快速發(fā)展[1],機(jī)動(dòng)車(chē)數(shù)量急劇增加,其中私家車(chē)隊(duì)伍也在不斷壯大,交通管理的規(guī)模和等級(jí)逐步擴(kuò)大,由此帶來(lái)的問(wèn)題也不斷增多。為此,實(shí)施智能交通管理,提高駕駛安全性能,改善交通亂象,越來(lái)越為行業(yè)所關(guān)注[2]。作為保障汽車(chē)行駛安全的智能汽車(chē)行駛記錄儀APP應(yīng)運(yùn)而生,因?yàn)樵谛熊?chē)過(guò)程中,可能會(huì)遇到很多突發(fā)事件,保留合適的現(xiàn)場(chǎng)資料成為應(yīng)對(duì)突發(fā)事件不可缺少的環(huán)節(jié),對(duì)其的研究、開(kāi)發(fā)和應(yīng)用也吸引了部分IT從業(yè)者。
本論文的研究基于Android平臺(tái),在該平臺(tái)下,進(jìn)行智能行車(chē)記錄儀APP的設(shè)計(jì)與實(shí)現(xiàn)[3],即不單獨(dú)設(shè)計(jì)硬件,借用安卓手機(jī)實(shí)現(xiàn)智能行車(chē)記錄功能。當(dāng)前,手機(jī)的更新?lián)Q代速度越來(lái)越快,很多人有兩個(gè)及兩個(gè)以上的手機(jī),二手手機(jī)買(mǎi)賣(mài)的價(jià)格較低,回收處理較復(fù)雜,而且目前國(guó)內(nèi)手機(jī)回收處理產(chǎn)業(yè)不發(fā)達(dá),所以可以利用淘汰的舊手機(jī)作為智能行車(chē)記錄儀APP的硬件平臺(tái),節(jié)省硬件成本。目前,人們對(duì)手機(jī)的操作比較熟練,開(kāi)發(fā)智能行車(chē)記錄儀APP某種程度上也方便了人們的使用。
基于以上結(jié)論,本文設(shè)計(jì)一種基于Android平臺(tái)的智能行車(chē)記錄儀APP,下面進(jìn)行詳細(xì)闡述。
2 系統(tǒng)功能設(shè)計(jì)
Android系統(tǒng)底層是基于Linux 2.6版本的內(nèi)核[4],如進(jìn)程管理、文件系統(tǒng)等,內(nèi)核是上層軟件與底層硬件通信的橋梁。Android系統(tǒng)框架大致可分為四個(gè)部分:應(yīng)用程序?qū)印?yīng)用框架層、庫(kù)和Android運(yùn)行時(shí)、Linux內(nèi)核[5]。
本系統(tǒng)是在Android應(yīng)用程序?qū)娱_(kāi)發(fā),根據(jù)需求,該手機(jī)應(yīng)用主要有以下幾種功能,一是根據(jù)出行方式的不同給出路線規(guī)劃,二是根據(jù)起點(diǎn)和終點(diǎn)給出實(shí)時(shí)導(dǎo)航,三是根據(jù)手機(jī)的方向傳感器給出方向和經(jīng)緯度,四是拍照和錄像功能,五是活動(dòng)的展示,六是音樂(lè)播放界面和功能的實(shí)現(xiàn),七是新聞和周邊頁(yè)面的查看,八是文件管理功能,包括圖片和視頻的縮略圖、列表展示功能,圖片的查看和視頻的播放功能,圖片和視頻文件的一鍵清理和分享功能,再者是連接到電腦,使用電腦管理手機(jī)文件。
3 系統(tǒng)功能實(shí)現(xiàn)
該系統(tǒng)客戶端使用Activity、Service兩大組件,充分利用Intent通信機(jī)制,并輔以SharedPreferences存儲(chǔ)數(shù)據(jù),HTTP協(xié)議和服務(wù)器通信[6],同時(shí)使用Mob移動(dòng)開(kāi)發(fā)者服務(wù)平臺(tái)和百度地圖開(kāi)發(fā)平臺(tái)提供的服務(wù),成功構(gòu)建了一款功能豐富的智能行車(chē)記錄儀APP。
該系統(tǒng)服務(wù)端使用Servlet接收客戶端發(fā)送的請(qǐng)求,由于只需要返回給客戶端數(shù)據(jù),而不需要通過(guò)瀏覽器展示圖形界面,所以不需要編寫(xiě)jsp。該系統(tǒng)采用MySQL數(shù)據(jù)庫(kù),在服務(wù)器和數(shù)據(jù)庫(kù)之前使用jdbc橋連接。
3.1 導(dǎo)航
3.1.1 百度地圖SDK
百度地圖 Android SDK是一套基于Android 2.1及以上版本設(shè)備的應(yīng)用程序接口[7],通過(guò)調(diào)用SDK接口,可以訪問(wèn)百度地圖的服務(wù)和數(shù)據(jù),其提供的所有服務(wù)都是免費(fèi)的,接口使用可以無(wú)次數(shù)限制。使用時(shí),必須先申請(qǐng)密匙(key),并在Mainfest.xml中設(shè)置Accesskey,在application標(biāo)簽中加入
百度地圖Android定位SDK是為Android移動(dòng)端應(yīng)用提供的一套簡(jiǎn)單易用的LBS(Location Based Service,基于位置的服務(wù))定位服務(wù)接口[8],可以提供GPS、基站、WiFi等定位方式。使用需先在xml文件中添加MapView,然后開(kāi)啟定位圖層。定位初始化過(guò)程中,首先實(shí)例化LocationClient,然后注冊(cè)定位監(jiān)聽(tīng),最后設(shè)置定位參數(shù),如坐標(biāo)系的選擇,定位時(shí)間間隔的控制等。定位監(jiān)聽(tīng)函數(shù)會(huì)返回位置信息,通過(guò)對(duì)位置信息的設(shè)置,即可顯示在界面上。在退出定位界面時(shí)應(yīng)關(guān)閉定位圖層,銷(xiāo)毀LocationClient,防止內(nèi)存泄露[4]。百度地圖Android 導(dǎo)航SDK與之原理類(lèi)似,不再贅述。
3.1.2 功能實(shí)現(xiàn)
首先,人們使用導(dǎo)航功能時(shí),更多的是需要找到從當(dāng)前位置到某一地點(diǎn)的路線,所以,本系統(tǒng)首先使用百度地圖定位SDK獲取到當(dāng)前位置[9],并在頁(yè)面上繪制出來(lái)街道、熱點(diǎn)等標(biāo)志,給用戶提供導(dǎo)航依據(jù),如圖2所示。然后,在頁(yè)面上起點(diǎn)和終點(diǎn)輸入框可以輸入地點(diǎn),在輸入時(shí)會(huì)觸發(fā)聯(lián)想詞功能(SuggestionSearch),智能提示用戶相應(yīng)地點(diǎn)。
3.2 文件管理
本系統(tǒng)需要管理的文件為視頻和圖片文件,視頻文件為調(diào)用系統(tǒng)攝像機(jī)錄像生成的,圖片文件為調(diào)用系統(tǒng)照相機(jī)拍攝生成的,生成的文件都存儲(chǔ)在自定義的文件下,這是為了把行車(chē)記錄儀文件和手機(jī)中的其他文件區(qū)分開(kāi)來(lái),便于管理。如圖3所示,為了提高用戶體驗(yàn),在文件管理界面,提供列表和縮略圖展示功能,點(diǎn)擊列表中的文件和縮略圖都可以進(jìn)行播放,同時(shí)常按縮略圖會(huì)跳出自定義對(duì)話框,自定義對(duì)話框功能為分享、刪除文件等。
3.2.1 縮略圖實(shí)現(xiàn)
無(wú)論圖片還是視頻縮略圖均使用GridView布局,為GridView添加Adapter便可根據(jù)文件的個(gè)數(shù)動(dòng)態(tài)添加縮略圖個(gè)數(shù)。此處為采用回調(diào)的方式自定義Adapter繼承BaseAdapter,要實(shí)現(xiàn)的有四個(gè)方法,其中最重要的有兩個(gè),getCount()和getView(),getCount()返回縮略圖的個(gè)數(shù),getView()返回縮略圖,在返回縮略圖的過(guò)程中需要?jiǎng)?chuàng)建一個(gè)ImageView對(duì)象,而利用ViewHolder和convertView結(jié)合便可以不重復(fù)創(chuàng)建ImageView對(duì)象,convertView.setTag()便是把創(chuàng)建的ImageView對(duì)象保存在convertView中,以待復(fù)用,convertView.getTag()便是把保存在convertView中的ImageView取出,進(jìn)行復(fù)用。
以上是把生成的縮略圖顯示在界面上,而生成圖片的縮略圖文件則用到了位圖工廠BitmapFactory,通過(guò)BitmapFactory可以生成一個(gè)原圖片的拷貝,同時(shí)其格式為bitmap,便可以修改大小了,這樣最終得到的圖片便是需要的縮略圖文件。而生成視頻的縮略圖文件則先通過(guò)ThumbnailUtils來(lái)創(chuàng)建一個(gè)視頻的縮略圖,然后再利用ThumbnailUtils來(lái)生成指定大小的縮略圖。
生成縮略圖是一個(gè)耗時(shí)操作,這時(shí)可以利用異步加載,在子線程中處理生成縮略圖的部分,而主線程負(fù)責(zé)顯示在界面上。本系統(tǒng)利用自定義異步類(lèi)繼承AsyncTask,重寫(xiě)doInBackground和onPostExecute兩個(gè)方法,便可以實(shí)現(xiàn)想要的功能。
3.2.2 查看圖片功能
為了能夠全屏顯示,首先通過(guò)DisplayMetrics獲得屏幕分辨率,然后把獲得到的圖片經(jīng)過(guò)BitmapFactory生成全屏的圖片。
3.2.3 視頻播放功能
首先播放時(shí)通過(guò)WindowManager把狀態(tài)欄隱藏,而播放視頻,首先需要解碼,原生的Android視頻播放框架支持的格式很小,這時(shí)可以利用一些開(kāi)源的框架,如百度的Android播放器SDK或者vitamio這種全能多媒體開(kāi)發(fā)框架,支持硬件解碼與GPU渲染。
本系統(tǒng)采用的是百度的Android播放器SDK,通過(guò)BVideoView為媒體播放顯示提供支持,BMediaController為媒體播放控制提供支持,在使用這些時(shí),需導(dǎo)入Jar包、.so動(dòng)態(tài)庫(kù)和相應(yīng)的資源文件。
3.3 音樂(lè)播放器
為了實(shí)現(xiàn)音樂(lè)播放功能,首先自定義服務(wù),通過(guò)繼承Android四大組件之一的Service來(lái)實(shí)現(xiàn)后臺(tái)音樂(lè)服務(wù),Service可以理解為沒(méi)有界面的Activity,但Service比Activity有更高的優(yōu)先級(jí)。如圖4所示,在定義服務(wù)中通過(guò)Handler機(jī)制實(shí)現(xiàn)刷新進(jìn)度條、持續(xù)時(shí)間、當(dāng)前音樂(lè)名稱(chēng)等UI界面,同時(shí)提供了播放當(dāng)前音樂(lè),播放下一首,暫停播放等方法,實(shí)現(xiàn)這些方法需要調(diào)用Android的MediaPlayer類(lèi)。而獲取音樂(lè)信息需要另一個(gè)組件ContentResolver,ContentProvider和ContentResolver是一對(duì),ContentProvider用來(lái)提供內(nèi)容給其他應(yīng)用來(lái)操作,ContentResolver用來(lái)操作自己或其他應(yīng)用數(shù)據(jù)。通過(guò)ContentResolver查詢到Media信息,然后把這些信息封裝到一個(gè)Parcelable類(lèi)中,提供給Service進(jìn)行處理。音樂(lè)列表的展示則通過(guò)ListView來(lái)實(shí)現(xiàn)。
在Activity中調(diào)用Service服務(wù)時(shí),首先通過(guò)ServiceConnection獲得自定義服務(wù)通過(guò)onBind返回的IBinder對(duì)象,通過(guò)IBinder對(duì)象可以調(diào)用Service中的所有public訪問(wèn)權(quán)限的方法,還可以通過(guò)注冊(cè)BroadcastReceiver接收Service發(fā)送的廣播執(zhí)行相應(yīng)操作。Android的IPC通信采用了更適合自己的IBinder機(jī)制,而不是Linux 的信號(hào)量、共享內(nèi)存、消息隊(duì)列等通信方式。
圖4 音樂(lè)空間及主界面
3.4 天氣情況
對(duì)于天氣情況這種需要獲取實(shí)時(shí)數(shù)據(jù)的服務(wù)[10],需要找提供穩(wěn)定且準(zhǔn)確數(shù)據(jù)的數(shù)據(jù)服務(wù)商,本系統(tǒng)選擇的是百度天氣API。首先通過(guò)百度地圖定位返回手機(jī)使用者所在的城市,然后創(chuàng)建一個(gè)子線程,使用Http協(xié)議獲取到天氣數(shù)據(jù),百度天氣返回的天氣數(shù)據(jù)為xml格式,通過(guò)解析xml即可獲得實(shí)時(shí)天氣數(shù)據(jù),然后利用Handler刷新主線程,把天氣情況顯示在主界面上。
3.5 個(gè)人中心
個(gè)人中心采用WebService和Android結(jié)合的C/S結(jié)構(gòu)方法設(shè)計(jì),要實(shí)現(xiàn)個(gè)人中心頁(yè)面,必須要實(shí)現(xiàn)注冊(cè)、登陸功能,首先要搭建數(shù)據(jù)庫(kù),存儲(chǔ)用戶名、密碼等信息,本系統(tǒng)采用MySQL數(shù)據(jù)庫(kù)[5],具體數(shù)據(jù)結(jié)構(gòu)如下表1所示。首先,在MyEclipse中新建一個(gè)Web Project,其中通過(guò)JDBC橋連接數(shù)據(jù)庫(kù),JDBC橋是java提供的一套訪問(wèn)數(shù)據(jù)庫(kù)的統(tǒng)一API。然后新建兩個(gè)Servlet,一個(gè)為客戶端登陸提供響應(yīng),一個(gè)為客戶端注冊(cè)提供響應(yīng),都是部署在Tomcat下,結(jié)構(gòu)如圖5所示??蛻舳税l(fā)送請(qǐng)求,服務(wù)器端完成注冊(cè)或登陸驗(yàn)證的操作,這之間通過(guò)Request和Response來(lái)攜帶數(shù)據(jù),最終實(shí)現(xiàn)客戶端登陸、注冊(cè)功能。
表1 數(shù)據(jù)結(jié)構(gòu)
圖5 C/S結(jié)構(gòu)圖
3.6 其他功能
如圖6所示,其中活動(dòng)中心頁(yè)面采用ListView布局,主要介紹一些熱門(mén)活動(dòng),周邊和新聞頁(yè)面則是跳轉(zhuǎn)相應(yīng)的網(wǎng)頁(yè)。對(duì)于違章查詢功能,因?yàn)橐尤敫鱾€(gè)地區(qū)的交管系統(tǒng),這里也采用第三方服務(wù)頁(yè)面。
圖6 其他功能界面
3.7 測(cè)試
本系統(tǒng)經(jīng)測(cè)試各項(xiàng)功能可用,部分效果圖如上面的圖片展示,如天氣信息的展示、拍照、攝像、定位、導(dǎo)航等。
4 結(jié)束語(yǔ)
針對(duì)當(dāng)前行車(chē)安全的現(xiàn)狀,設(shè)計(jì)并實(shí)現(xiàn)了基于Android的行車(chē)記錄儀APP,這種設(shè)計(jì)不但有助于改善交通亂象,同時(shí)節(jié)省了硬件成本。在功能設(shè)計(jì)上,該系統(tǒng)不僅可以對(duì)路徑進(jìn)行定位和導(dǎo)航,可以拍照、攝像,并對(duì)圖片和視頻文件進(jìn)行管理,同時(shí)提供音樂(lè)播放等功能,充分滿足用戶駕駛過(guò)程中的需要。隨著用戶空間的不斷完善,使用者會(huì)體驗(yàn)到更滿意的服務(wù)。
參考文獻(xiàn):
[1] 趙娜, 袁家斌, 徐晗. 智能交通系統(tǒng)綜述[J]. 計(jì)算機(jī)科學(xué), 2014, 41(11).
[2] 東岳. 行車(chē)記錄儀漏秒的檢測(cè)[J]. 交通與運(yùn)輸, 2014, 30(3).
[3] 梁景裕. 汽車(chē)電子高度集成化路暢暢安導(dǎo)航內(nèi)置行車(chē)記錄儀體驗(yàn)評(píng)測(cè)[J]. 消費(fèi)電子, 2014(17).
[4] 張華亮. 基于Linux自由及開(kāi)放源代碼的Android操作系統(tǒng)[J]. 計(jì)算機(jī)與網(wǎng)絡(luò), 2016, 42(3).
[5] 王躍, 許志遠(yuǎn), 嚴(yán)玨瑋. 移動(dòng)智能終端操作系統(tǒng)技術(shù)發(fā)展[J]. 中興通訊技術(shù), 2014, 20(2).
[6] 宋強(qiáng), 齊貴寶, 宋占偉. 基于Android系統(tǒng)的H.264視頻監(jiān)控設(shè)計(jì)[J]. 吉林大學(xué)學(xué)報(bào):信息科學(xué)版, 2012, 30(3).
[7] 顧聰, 陳益強(qiáng), 劉軍發(fā), 等. 基于Android平臺(tái)的室內(nèi)LBS系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)工程與設(shè)計(jì), 2012, 33(1).
[8] 張波. 基于Android平臺(tái)的百度地圖開(kāi)發(fā)研究[J]. 軟件導(dǎo)刊, 2015, 14(7).
[9] 蔣建華. 行車(chē)記錄儀中GIS的設(shè)計(jì)研究[J]. 信息技術(shù)與信息化, 2016(4).
[10] 趙士達(dá), 張楠, 楊爽. 基于云計(jì)算和Android的地震應(yīng)急信息獲取系統(tǒng)[J]. 計(jì)算機(jī)應(yīng)用, 2014(z1).