白云偉, 李麗萍
(上海第二工業(yè)大學(xué) 計(jì)算機(jī)與信息工程學(xué)院, 上海 201209)
汽車(chē)行業(yè)飛速發(fā)展, 生活越來(lái)越便利, 用戶(hù)對(duì)汽車(chē)服務(wù)的要求越來(lái)越高, 近幾年隨著新能源車(chē)步入市場(chǎng),新能源車(chē)系列也受到越來(lái)越多人的青睞.物聯(lián)網(wǎng)時(shí)代,本著萬(wàn)物互聯(lián)的暢想, 手機(jī)和車(chē)機(jī)互聯(lián)也隨之而生, 能夠運(yùn)用手機(jī)APP 來(lái)遠(yuǎn)程控制車(chē)輛成為用戶(hù)的迫切需求.
遠(yuǎn)程控制APP 利用實(shí)時(shí)通信技術(shù), 以頁(yè)面圖標(biāo)呈現(xiàn)的方式供用戶(hù)實(shí)時(shí)查看車(chē)輛狀態(tài)參數(shù), 并且用戶(hù)可以根據(jù)需要進(jìn)行遠(yuǎn)程開(kāi)關(guān)空調(diào), 遠(yuǎn)程開(kāi)關(guān)車(chē)門(mén), 遠(yuǎn)程定位車(chē)輛, 個(gè)性化設(shè)置, 以及遠(yuǎn)程召喚車(chē)輛和車(chē)外自動(dòng)泊車(chē)等操作.
遠(yuǎn)程控制APP 用Android Studio 3.0 作為開(kāi)發(fā)平臺(tái), 服務(wù)器采用XMPP 通信協(xié)議實(shí)時(shí)通信和MySQL數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)操作.
Android Studio 是Google 推出的一個(gè)Android 集成開(kāi)發(fā)工具, 基于IntelliJ IDEA, 類(lèi)似Eclipse ADT,Android Studio 提供了集成的Android 開(kāi)發(fā)工具用于開(kāi)發(fā)和調(diào)試.開(kāi)發(fā)者可以在編寫(xiě)程序的同時(shí)看到自己的應(yīng)用在不同尺寸屏幕中的樣子.Android 是一種基于Linux 的自由及開(kāi)放源代碼的操作系統(tǒng), 主要使用于移動(dòng)設(shè)備, 如智能手機(jī)和平板電腦.Android 操作系統(tǒng)有4 層架構(gòu), 從高層到低層分別是應(yīng)用程序?qū)?、?yīng)用程序框架層、系統(tǒng)運(yùn)行層和Linux 內(nèi)核層[1].Android 有4 大組件: Activity, Service, BroadcastReceiver 和ContentProvider.
可擴(kuò)展消息處理現(xiàn)場(chǎng)協(xié)議XMPP (eXtensible Messaging and Presence Protocol)是一種基于可擴(kuò)展標(biāo)記語(yǔ)言(eXtensible Markup Language, XML)的近端串流式即時(shí)通信協(xié)議.XMPP 中定義了3 個(gè)角色, 客戶(hù)端, 服務(wù)器, 網(wǎng)關(guān).通信能夠在這三者的任意兩個(gè)之間雙向發(fā)生.服務(wù)器同時(shí)承擔(dān)了客戶(hù)端信息記錄, 連接管理和信息的路由功能.網(wǎng)關(guān)承擔(dān)著與異構(gòu)即時(shí)通信系統(tǒng)的互聯(lián)互通, 異構(gòu)系統(tǒng)可以包括SMS (短信), MSN, ICQ 等.基本的網(wǎng)絡(luò)形式是單客戶(hù)端通過(guò)TCP/IP 連接到單服務(wù)器, 然后在之上傳輸XML.XMPP 協(xié)議的優(yōu)點(diǎn): 分布式, 安全, 可擴(kuò)展, 彈性佳, 多樣性, 分布式的網(wǎng)絡(luò)架構(gòu)[2].
數(shù)據(jù)庫(kù)系統(tǒng)MySQL 所使用的SQL 語(yǔ)言是用于訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的最常用標(biāo)準(zhǔn)化語(yǔ)言.MySQL 軟件采用了雙授權(quán)政策, 分為社區(qū)版和商業(yè)版, 由于其體積小、速度快、總體擁有成本低, 尤其是開(kāi)放源碼這一特點(diǎn), 一般中小型網(wǎng)站的開(kāi)發(fā)都選擇MySQL 作為網(wǎng)站數(shù)據(jù)庫(kù)[3].
在該APP 中, 采用JSON 格式的數(shù)據(jù)封裝到XMPP 協(xié)議里進(jìn)行通信, 并用高德地圖提供聯(lián)想搜索和導(dǎo)航功能, 采用GPS 技術(shù)獲取車(chē)輛位置, 便于查找和遠(yuǎn)程召喚車(chē)輛, 并利用Android 的Service 功能保持APP 后臺(tái)運(yùn)行, 然后采用極光推送平臺(tái)進(jìn)行消息推送.
JSON (Java Script Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式.它是基于ECMAScript (歐洲計(jì)算機(jī)協(xié)會(huì)制定的js 規(guī)范)的一個(gè)子集[4], 采用完全獨(dú)立于編程語(yǔ)言的文本格式來(lái)存儲(chǔ)和表示數(shù)據(jù).簡(jiǎn)潔和清晰的層次結(jié)構(gòu)使得JSON 成為理想的數(shù)據(jù)交換語(yǔ)言.易于人閱讀和編寫(xiě), 同時(shí)也易于機(jī)器解析和生成, 并有效地提升網(wǎng)絡(luò)傳輸效率.
高德地圖開(kāi)放平臺(tái)為Android 系統(tǒng)所提供的服務(wù)包含地圖、定位、導(dǎo)航、搜索、路徑規(guī)劃、室內(nèi)地圖[5]等.該APP 通過(guò)加載高德地圖SDK 主要用到POI 聯(lián)想搜索和導(dǎo)航功能.
利用GPS 定位衛(wèi)星, 在全球范圍內(nèi)實(shí)時(shí)進(jìn)行定位、導(dǎo)航的系統(tǒng), 稱(chēng)為全球衛(wèi)星定位系統(tǒng), 簡(jiǎn)稱(chēng)GPS[6].遠(yuǎn)程車(chē)輛定位功能調(diào)用手機(jī)的GPS 和車(chē)機(jī)的GPS, 來(lái)進(jìn)行人與車(chē)的定位和導(dǎo)航.
極光推送, 英文簡(jiǎn)稱(chēng)JPush, 是一個(gè)面向普通開(kāi)發(fā)者開(kāi)放的, 免費(fèi)的第三方消息推送服務(wù)[7].開(kāi)發(fā)者只需在客戶(hù)端集成極光推送SDK, 即可輕松地添加Push 功能到他的APP 中.該APP 運(yùn)用極光推送API 實(shí)現(xiàn)車(chē)輛實(shí)時(shí)情況的消息推送.
車(chē)輛遠(yuǎn)程控制APP 的常規(guī)功能是注冊(cè)登錄功能,其他功能是根據(jù)一些場(chǎng)景一一對(duì)應(yīng)設(shè)計(jì)出來(lái)的.(1)用手機(jī)控制車(chē)輛, 首先要知道控制哪輛車(chē), 對(duì)應(yīng)有綁定車(chē)輛功能; (2)用戶(hù)坐在自己家里想知道自己車(chē)的基本狀況, 如車(chē)內(nèi)溫度, 空調(diào)開(kāi)關(guān)情況, 車(chē)門(mén)是否上鎖, 胎溫胎壓是否異常等等, 對(duì)應(yīng)有查看車(chē)輛狀態(tài)和故障報(bào)警功能; (3)用戶(hù)的車(chē)停在大型車(chē)庫(kù), 要去取車(chē)時(shí)反復(fù)尋找但找不到自己的車(chē), 這時(shí)用遠(yuǎn)程找車(chē)功能, 可以快速找到愛(ài)車(chē); (4)有些停車(chē)位比較難停, 對(duì)于新手司機(jī)停車(chē)是個(gè)大問(wèn)題, 對(duì)應(yīng)用遠(yuǎn)程自動(dòng)泊車(chē)功能; (5)用戶(hù)有時(shí)有事情又急于用車(chē), 這時(shí)候希望車(chē)能夠自行開(kāi)到指定位置, 應(yīng)運(yùn)而生遠(yuǎn)程召喚功能; (6)用戶(hù)沒(méi)有打開(kāi)APP,但此時(shí)車(chē)輛有故障或者電量過(guò)低, 手機(jī)會(huì)收到推送消息進(jìn)行提示; (7)用戶(hù)有時(shí)忘帶車(chē)鑰匙, 但需要打開(kāi)車(chē)門(mén), 此時(shí)就需要遠(yuǎn)程開(kāi)車(chē)門(mén)功能; (8)夏天天氣炎熱, 車(chē)停在路邊導(dǎo)致車(chē)內(nèi)溫度過(guò)高, 為了方便用戶(hù)能夠隨時(shí)上車(chē), 可以使用遠(yuǎn)程開(kāi)空調(diào)功能提前給車(chē)內(nèi)降溫.還有提供聯(lián)想搜索功能可以設(shè)置家庭和公司的地址, 提供導(dǎo)航功能等等.
與APP 對(duì)接的后臺(tái)監(jiān)測(cè)系統(tǒng)需要完成以下幾個(gè)任務(wù): (1)制定與APP 的接口; (2) APP 用戶(hù)注冊(cè)和登錄的賬號(hào), 用戶(hù)名, 密碼管理; (3) APP 版本的升級(jí); (4)管理車(chē)機(jī)ID, 找到對(duì)應(yīng)的車(chē)機(jī)系統(tǒng); (5)作為通信中轉(zhuǎn)站,轉(zhuǎn)發(fā)APP 與車(chē)機(jī)系統(tǒng)之間的通信數(shù)據(jù), 并保存這些數(shù)據(jù)到數(shù)據(jù)庫(kù).
用戶(hù)通過(guò)Android 客戶(hù)端發(fā)送操控指令給后臺(tái),后臺(tái)接收指令并將指令轉(zhuǎn)發(fā)給車(chē)機(jī)系統(tǒng), 并在后臺(tái)數(shù)據(jù)庫(kù)保存指令消息.車(chē)機(jī)系統(tǒng)做出相應(yīng)的處理并將處理結(jié)果通過(guò)后臺(tái)再傳給客戶(hù)端進(jìn)行界面顯示或進(jìn)行通知欄推送消息等.車(chē)機(jī)端安裝一個(gè)車(chē)機(jī)控制系統(tǒng), 該系統(tǒng)會(huì)接收來(lái)自服務(wù)器的消息, 然后解析出用戶(hù)給的指令, 通過(guò)CAN 總線(xiàn)發(fā)送信號(hào)給車(chē)的XCU 部件, 然后X C U 做出相應(yīng)的控制操作, 等待底層部件通過(guò)CAN 總線(xiàn)回復(fù)成功或失敗的信號(hào)后, 該車(chē)機(jī)系統(tǒng)再把該信號(hào)封裝成XMPP 協(xié)議的消息回復(fù)給服務(wù)器, 然后服務(wù)器解析出目的JID, 然后再把消息轉(zhuǎn)發(fā)給該DST JID.整體架構(gòu)如圖1 所示.
圖1 整體架構(gòu)圖
車(chē)輛遠(yuǎn)程控制APP 采用MVC 的架構(gòu)設(shè)計(jì)模式,該模式可提高開(kāi)發(fā)效率, 降低模塊間的耦合性.MVC 中的M (模型)是指獲取到的XMPP 協(xié)議所解析出來(lái)的JSON 數(shù)據(jù).視圖層是每個(gè)XML 的布局文件main_activity.xml 等, 包括自定義的view.控制層是指APP 開(kāi)發(fā)中的各個(gè)Activity 和Fragment, 如MainActivity,ErrorActivity, ParkActivity, PositionSelectActivity,VehicleBindActivity, LoginActivity 等.APP 的主頁(yè)面采用多個(gè)Fragment 嵌套在一個(gè)Activity 中的方式實(shí)現(xiàn),使用Viewpager 來(lái)控制多個(gè)Fragment 的切換, 增加頁(yè)面切換靈活性.
車(chē)輛遠(yuǎn)程控制APP 的主要功能有: APP 注冊(cè)和登錄, 車(chē)輛綁定, 車(chē)輛基本狀態(tài)顯示, 遠(yuǎn)程開(kāi)關(guān)車(chē)門(mén), 遠(yuǎn)程開(kāi)關(guān)空調(diào), 遠(yuǎn)程尋車(chē), 車(chē)外自動(dòng)泊車(chē), 車(chē)輛定位, 車(chē)輛遠(yuǎn)程召喚和OTA 升級(jí)等等.
APP 的主要功能結(jié)構(gòu)圖如圖2 所示.
圖2 車(chē)輛遠(yuǎn)程控制APP 功能結(jié)構(gòu)圖
后臺(tái)監(jiān)測(cè)系統(tǒng)功能結(jié)構(gòu)圖如圖3 所示.
圖3 后臺(tái)監(jiān)測(cè)系統(tǒng)的功能結(jié)構(gòu)圖
用戶(hù)打開(kāi)APP 點(diǎn)擊注冊(cè)按鈕, 進(jìn)入注冊(cè)頁(yè)面, 進(jìn)行用戶(hù)名, 手機(jī)號(hào)和密碼的輸入, 然后通過(guò)Okhttp[8]網(wǎng)絡(luò)框架進(jìn)行服務(wù)器請(qǐng)求將數(shù)據(jù)上傳到后臺(tái), 后臺(tái)系統(tǒng)判斷該賬號(hào)是否已經(jīng)被注冊(cè)過(guò), 如果已經(jīng)注冊(cè)過(guò)給出已注冊(cè)提示, 如果未注冊(cè)過(guò)寫(xiě)入服務(wù)器, 給出注冊(cè)成功提示, 然后頁(yè)面跳轉(zhuǎn)到登錄界面, 在登錄界面輸入賬號(hào)密碼進(jìn)行登錄, 登錄數(shù)據(jù)也通過(guò)Okhttp 進(jìn)行服務(wù)器請(qǐng)求, 將賬號(hào)和密碼與后臺(tái)數(shù)據(jù)庫(kù)已經(jīng)注冊(cè)的賬號(hào)密碼匹配, 如果存在并且密碼正確提示登錄成功, 如果不存在提示未注冊(cè), 如果密碼不正確提示重新輸入, 登錄后進(jìn)入車(chē)輛綁定界面.在登錄界面如果選中記住密碼, 則下次可以進(jìn)入登錄界面可以直接點(diǎn)登錄, 不用再重新輸入.注冊(cè)和登錄流程圖如圖4 所示.
主頁(yè)面由底部導(dǎo)航欄和車(chē)輛基本狀態(tài)兩部分組成,底部導(dǎo)航欄有3 部分組成, 分別是輪胎狀態(tài)Fragment,車(chē)輛基本狀況Fragment, 遠(yuǎn)程控制Fragment, 3 個(gè)Fragment 可以用手指滑動(dòng)進(jìn)行切換.車(chē)輛基本狀態(tài)頁(yè)面主要顯示車(chē)內(nèi)溫度, 剩余電量, 空調(diào)狀態(tài)和車(chē)門(mén)狀態(tài),頁(yè)面左上角是個(gè)人信息設(shè)置, 右上角是故障報(bào)警.空調(diào)和車(chē)門(mén)鎖是兩個(gè)按鈕事件, 監(jiān)聽(tīng)按鈕點(diǎn)擊事件, 可以點(diǎn)擊這兩個(gè)按鈕通過(guò)XMPP 協(xié)議發(fā)送指令.XMPP 協(xié)議格式見(jiàn)表1.
輪胎狀態(tài)頁(yè)面顯示胎溫和胎壓的數(shù)據(jù)指標(biāo), 如有異常, 對(duì)應(yīng)的輪胎會(huì)亮紅.遠(yuǎn)程控制頁(yè)面有6 個(gè)按鈕事件組成, 對(duì)應(yīng)著6 個(gè)功能, 下面會(huì)一一詳細(xì)介紹.主頁(yè)面效果圖如圖5 所示.
圖4 注冊(cè)和登錄流程圖
表1 XMPP 協(xié)議格式
點(diǎn)擊遠(yuǎn)程控制頁(yè)面的遠(yuǎn)程尋車(chē)按鈕, ButtonListener監(jiān)聽(tīng)到該點(diǎn)擊事件, 即會(huì)通過(guò)XMPP 協(xié)議發(fā)送尋車(chē)指令給后臺(tái), 后臺(tái)解析該消息頭, 找到車(chē)機(jī)JID, 然后把JSON 格式的MsgContents 繼續(xù)封裝進(jìn)XMPP 消息, 發(fā)送給車(chē)機(jī)系統(tǒng), 車(chē)機(jī)系統(tǒng)收到消息后就會(huì)控制車(chē)輛進(jìn)行閃燈和鳴笛, 方便用戶(hù)尋找.遠(yuǎn)程開(kāi)空調(diào)功能類(lèi)似遠(yuǎn)程尋車(chē), 點(diǎn)擊遠(yuǎn)程開(kāi)空調(diào)按鈕, ButtonListener 監(jiān)聽(tīng)到該點(diǎn)擊事件, 即會(huì)通過(guò)XMPP 協(xié)議發(fā)送開(kāi)空調(diào)或關(guān)空調(diào)指令給后臺(tái), 后臺(tái)解析該消息頭, 找到車(chē)機(jī)JID, 然后把JSON 格式的MsgContents 繼續(xù)封裝進(jìn)XMPP 消息,發(fā)送給車(chē)機(jī)系統(tǒng), 車(chē)機(jī)系統(tǒng)收到消息后就會(huì)控制車(chē)輛進(jìn)行開(kāi)或關(guān)空調(diào), 并且將操作結(jié)果返回給手機(jī)端在頁(yè)面上呈現(xiàn).遠(yuǎn)程開(kāi)車(chē)門(mén)命令與遠(yuǎn)程尋車(chē)和遠(yuǎn)程開(kāi)空調(diào)功能類(lèi)似.
打開(kāi)主頁(yè)面的車(chē)輛定位按鈕, 會(huì)進(jìn)入地圖界面, 進(jìn)入該界面同時(shí), APP 會(huì)發(fā)送一條GPS 的請(qǐng)求給車(chē)機(jī)系統(tǒng), 等待獲取到返回的車(chē)輛GPS 信息后, 會(huì)顯示車(chē)輛的位置在地圖上, 并且會(huì)調(diào)用手機(jī)的GPS 顯示用戶(hù)的位置, 此時(shí)點(diǎn)擊導(dǎo)航到車(chē), 會(huì)出現(xiàn)用戶(hù)和車(chē)的路線(xiàn)規(guī)劃,用戶(hù)可以選擇導(dǎo)航到車(chē)的位置, 即會(huì)開(kāi)始實(shí)時(shí)導(dǎo)航, 導(dǎo)航到車(chē)的位置后自動(dòng)結(jié)束導(dǎo)航.車(chē)輛定位界面如圖6所示.
打開(kāi)主頁(yè)面的車(chē)外泊車(chē)按鈕, 進(jìn)入車(chē)外泊車(chē)頁(yè)面,同時(shí)會(huì)向車(chē)機(jī)請(qǐng)求車(chē)位信息, 車(chē)機(jī)系統(tǒng)會(huì)把車(chē)位的4 個(gè)坐標(biāo)點(diǎn)(x1, y1), (x2, y2), (x3, y3), (x4, y4)發(fā)過(guò)來(lái),并且會(huì)有一個(gè)標(biāo)記位記錄該車(chē)位是否為空, 手機(jī)端收到車(chē)位信息后要把數(shù)據(jù)解析出來(lái), 然后通過(guò)標(biāo)記位選出空車(chē)位, 并記錄下空車(chē)位的4 個(gè)坐標(biāo)信息, 然后再根據(jù)車(chē)位與車(chē)的相對(duì)位置, 在界面上自己繪制view, 車(chē)在view 的正中間, 然后以車(chē)為中心, 首先將車(chē)位坐標(biāo)系進(jìn)行轉(zhuǎn)換, 轉(zhuǎn)換成為手機(jī)坐標(biāo)系, 然后再將車(chē)位的坐標(biāo)點(diǎn)轉(zhuǎn)化成像素, 然后與車(chē)的坐標(biāo)進(jìn)行比較, 車(chē)位的x 坐標(biāo)小于車(chē)的x 坐標(biāo)的位于車(chē)的左側(cè), 車(chē)位的x 坐標(biāo)大于的車(chē)的x 坐標(biāo)的位于車(chē)的右側(cè), 車(chē)位的y 坐標(biāo)小于車(chē)的y 坐標(biāo)的位于車(chē)的上側(cè), 車(chē)位的y 坐標(biāo)大于車(chē)的y 坐標(biāo)的位于車(chē)的下側(cè)(比如, 車(chē)的像素坐標(biāo)是(540, 960), 那么車(chē)位轉(zhuǎn)換后的像素坐標(biāo)為(480, 550),這個(gè)車(chē)位就位于車(chē)的左上側(cè))以此繪制車(chē)位圖, 繪制完成后空車(chē)位可供用戶(hù)隨意選擇, 用戶(hù)觸屏選擇要停進(jìn)去的車(chē)位, 然后view 會(huì)監(jiān)聽(tīng)該手指點(diǎn)擊事件, 獲取到選擇的空車(chē)位編號(hào), 將該編號(hào)組成JSON 格式的數(shù)據(jù)封裝到XMPP 協(xié)議里面, 發(fā)送給車(chē)機(jī), 車(chē)機(jī)系統(tǒng)收到車(chē)位選擇消息后, 開(kāi)始控制車(chē)輛開(kāi)始自動(dòng)泊車(chē).泊車(chē)成功后會(huì)推送成功的消息給手機(jī)端, 如果泊車(chē)失敗, 車(chē)上的360 攝像頭會(huì)拍攝一張場(chǎng)景圖發(fā)送給后臺(tái), 然后后臺(tái)轉(zhuǎn)發(fā)給手機(jī)端, 手機(jī)端下載圖片后顯示給用戶(hù).車(chē)外泊車(chē)效果圖如圖7 所示.
圖5 主頁(yè)面效果圖
圖6 車(chē)輛定位效果圖
點(diǎn)擊主頁(yè)的遠(yuǎn)程召喚功能, 進(jìn)入遠(yuǎn)程召喚頁(yè)面, 如圖8 所示, 4 個(gè)位置的按鈕可以控制車(chē)輛前后左右移動(dòng), 點(diǎn)擊按鈕即發(fā)送移動(dòng)指令, 后臺(tái)監(jiān)測(cè)系統(tǒng)收到前端APP 發(fā)來(lái)的指令后, 進(jìn)行解析, 消息Head 部分解析出目的地JID 信息, 然后將Body 部分封裝成一個(gè)新的消息, 將該消息轉(zhuǎn)發(fā)給JID 對(duì)應(yīng)的車(chē)機(jī)系統(tǒng), 車(chē)機(jī)系統(tǒng)開(kāi)始控制車(chē)輛移動(dòng), 用戶(hù)松開(kāi)按鈕即發(fā)送停止命令, 然后經(jīng)過(guò)后臺(tái)系統(tǒng)轉(zhuǎn)發(fā)個(gè)車(chē)機(jī)系統(tǒng)控制車(chē)輛停止.
圖7 車(chē)外泊車(chē)效果圖
下拉主頁(yè)進(jìn)行刷新, 此時(shí)會(huì)觸發(fā)APP 后臺(tái)會(huì)發(fā)送一條狀態(tài)查詢(xún)指令, 查詢(xún)的狀態(tài)包括車(chē)內(nèi)溫度, 空調(diào)開(kāi)關(guān), 車(chē)門(mén)開(kāi)關(guān), 車(chē)的剩余電量, 胎溫胎壓, 車(chē)輛是否有故障等.服務(wù)器端收到這條指令后進(jìn)行MsgType 和MsgHeader 的解析, 然后解析出車(chē)機(jī)JID, 將該指令重新封裝成XMPP 消息發(fā)送給對(duì)應(yīng)的車(chē)機(jī), 車(chē)機(jī)解析出指令, 然后通過(guò)CAN 把指令發(fā)給對(duì)應(yīng)的XCU, 通過(guò)對(duì)應(yīng)的XCU 收集到需要的狀態(tài), 然后把該狀態(tài)封裝成XMPP消息回復(fù)給對(duì)應(yīng)的服務(wù)器, 再有服務(wù)器轉(zhuǎn)發(fā)給對(duì)應(yīng)的手機(jī)JID, 然后手機(jī)端會(huì)根據(jù)返回的狀態(tài)在界面上進(jìn)行顯示, 如圖5 所示, 如果車(chē)有故障, 在圖5 的“我的汽車(chē)”界面右上角的角標(biāo)會(huì)亮紅色, 并且顯示故障的數(shù)量,然后點(diǎn)擊該紅色角標(biāo)會(huì)顯示具體的故障信息.
圖8 車(chē)輛召喚功能實(shí)現(xiàn)頁(yè)面
本文設(shè)計(jì)和實(shí)現(xiàn)的車(chē)輛遠(yuǎn)程控制APP, 方便用戶(hù)隨時(shí)隨地的查看自己車(chē)輛狀態(tài)信息.針對(duì)該APP 的功能進(jìn)行場(chǎng)景需求分析, 主要講述Android 系統(tǒng)手機(jī)端APP 的設(shè)計(jì)以及各個(gè)功能的具體實(shí)現(xiàn).最后該APP 完成了真實(shí)的車(chē)輛控制原型系統(tǒng), 配合車(chē)機(jī)系統(tǒng)投入到實(shí)際的應(yīng)用當(dāng)中, 為用戶(hù)提供了方便, 提高新能源車(chē)的使用體驗(yàn).