賴盛鑫 高建華
摘 要:移動(dòng)互聯(lián)網(wǎng)時(shí)代,用戶可通過(guò)手機(jī)隨時(shí)隨地從互聯(lián)網(wǎng)上獲取信息?;诎沧渴謾C(jī)系統(tǒng)和百度地圖軟件開(kāi)發(fā)工具包,分析人們生活出行時(shí)的各種需求,充分運(yùn)用九宮格手勢(shì)密碼、Java語(yǔ)言和SharePreference等基本技術(shù),對(duì)無(wú)憂出行應(yīng)用軟件進(jìn)行功能模塊設(shè)計(jì)。該系統(tǒng)實(shí)現(xiàn)了二維碼電子名片取代傳統(tǒng)名片的發(fā)放,具備查詢?nèi)珖?guó)城市天氣預(yù)報(bào)和公交車路線功能,能調(diào)用百度地圖SDK獲得周圍商家數(shù)據(jù)信息。應(yīng)用實(shí)驗(yàn)表明,該軟件與同類APP相比,更加注重用戶體驗(yàn),使用方便,具有較強(qiáng)的通用性。
關(guān)鍵詞: 安卓應(yīng)用程序;百度地圖;二維碼名片;天氣預(yù)報(bào)
DOI:10.11907/rjdk.181061
中圖分類號(hào):TP319
文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-7800(2018)006-0106-05
Abstract:The advent of the era of mobile Internet, the user through the phone can access to real-time information from the Internet at any time, anywhere. The article based on the android mobile phone system software development kit and Baidu map, analyzes the diverse needs of people travel life, uses of the Jiugongge gesture password, Java language, SharePreference and other basic theory of the functional module design. The application achieves a two-dimensional code electronic business card to replace the traditional business card issuance in the technical innovation; Completed the query the national city weather forecast and the function of the bus route query; Call Baidu map SDK to obtain merchants data, and obtain corresponding stores information such as the telephone and so on. The application experiment shows that the software, compared with the similar APP on the market, pays more attention to user experience, and easy to use, strong commonality.
Mobile phone users can obtain information from Internet anywhere at any time in this mobile Internet era. People's various travel needs are analyzed by Android mobile system and Baidu Map kit. Technologies including Sudoku gesture codes, Java language and SharePreference are employed for function module design of worry-free trip application software. Traditional business cards are replaced by two-dimensional code eletrical business cards in the APP. It also provides nationwide weather report and bus route query and employs Baidu Map SDK to obtain nearby merchants' information. According to the usability testing, the APP is more focused on users' experience, user-freindly and of stronger commonality compared with other similar APPs.
Key Words:Android application (App); Baidu map; QR-core card; weather forecast
0 引言
隨著信息技術(shù)的迅猛發(fā)展,移動(dòng)設(shè)備已成為日常交流的工具[1]。Android平臺(tái)憑借系統(tǒng)版更新周期短、開(kāi)源等優(yōu)勢(shì),吸引越來(lái)越多的開(kāi)發(fā)者或企業(yè)參與到手機(jī)應(yīng)用開(kāi)發(fā)中,開(kāi)發(fā)出了眾多對(duì)生活出行非常實(shí)用的應(yīng)用軟件,如支付寶、大眾點(diǎn)評(píng)、美團(tuán)、百度地圖等,但這些軟件功能過(guò)于臃腫且植入廣告眾多,運(yùn)行速度慢,用戶體驗(yàn)不佳。鑒于以上不足,本文綜合現(xiàn)有研究成果[2-4],利用Android studio工具環(huán)境[5-6],充分研究平臺(tái)測(cè)試[7-8]、安全[9]等方面因素,設(shè)計(jì)并實(shí)現(xiàn)了一款更實(shí)用的系統(tǒng)軟件。
系統(tǒng)實(shí)現(xiàn)如下功能:九宮格手勢(shì)解鎖密碼、電子二維碼名片生成、城市天氣查詢、公交線路查詢、搜索用戶所在地點(diǎn)周圍2km內(nèi)所有商家和公共設(shè)施并顯示路線地圖。
(1)任何擁有Android智能手機(jī)的用戶都可以使用該應(yīng)用軟件,為出行生活提供暢行無(wú)憂的貼心指導(dǎo)。
(2)九宮格手勢(shì)密碼設(shè)置,不僅提供獨(dú)一無(wú)二的軟件用戶使用權(quán),還能根據(jù)用戶的喜好設(shè)置解鎖圖案,在用戶手機(jī)上實(shí)現(xiàn)創(chuàng)建、修改、找回密碼功能,節(jié)省郵箱等驗(yàn)證找回密碼的時(shí)間,增強(qiáng)了用戶體驗(yàn)感,提高了軟件使用的安全性。
(3)二維碼電子名片取代了傳統(tǒng)的紙質(zhì)名片,方便快捷,既順應(yīng)移動(dòng)互聯(lián)網(wǎng)電子二維碼盛行的潮流,又符合當(dāng)下低碳環(huán)保理念。
(4)用戶可以隨時(shí)隨地查看全國(guó)各主要城市未來(lái)3天天氣情況,全國(guó)各主要城市公交車線路情況,為人們提供出行參考。
(5)用戶可查詢附近所有的商家和公共設(shè)施詳情,并通過(guò)地圖規(guī)劃選擇最優(yōu)路徑。
(6)主頁(yè)面周圍商家圖片生動(dòng)形象,UI界面運(yùn)行流暢,采用主流的主頁(yè)切換模式,無(wú)商業(yè)廣告信息。
1 相關(guān)理論與關(guān)鍵技術(shù)
1.1 九宮格手勢(shì)密碼原理
本系統(tǒng)通過(guò)一個(gè)九宮格圖案進(jìn)行登錄密碼設(shè)置。九宮格圖案是一個(gè)3行3列的二維矩陣[10],當(dāng)用戶指尖劃過(guò)一個(gè)數(shù)字時(shí),系統(tǒng)就記錄了該數(shù)字,隨后將該數(shù)字利用SharePreference存儲(chǔ)技術(shù)保存到手機(jī)內(nèi)存,在登錄前進(jìn)行數(shù)據(jù)比對(duì)驗(yàn)證。同類APP中大多建立后端數(shù)據(jù)庫(kù)調(diào)取數(shù)據(jù),在網(wǎng)絡(luò)條件較差時(shí)常常出現(xiàn)調(diào)取失敗現(xiàn)象,本文采用的技術(shù)與同類APP相比,提高了運(yùn)行速度,避免了APP程序崩潰的風(fēng)險(xiǎn)。
通常情況下,繪制一個(gè)九宮格圖案最短的只繪制一個(gè)點(diǎn),最長(zhǎng)可以繪制連接9個(gè)點(diǎn)。根據(jù)數(shù)學(xué)排列組合原理可知,如果從只繪制一個(gè)點(diǎn)到9個(gè)點(diǎn)共有A9-9+A8-9+A7-9+A6-9+A5-9+A4-9+A3-9+A2-9+A1-9=986 409種繪制方法,增強(qiáng)了安全性。
1.2 二維碼生成原理
二維碼(Two-dimension code)是用矩陣符號(hào)組成的[11],并以特定的幾何圖形按一定規(guī)律在平面上(二維方向)分布的黑白相間的圖形記錄符號(hào)[12]。二維碼主要分為堆疊式/行排式和矩陣式[13]。矩陣式中的QR-CODE,即快速回復(fù)二維碼,是目前最為流行的一種。QR-CODE具有存儲(chǔ)信息量大、識(shí)讀速度快、糾錯(cuò)能力強(qiáng)等優(yōu)點(diǎn),廣泛應(yīng)用于支付生活等領(lǐng)域。
本文設(shè)計(jì)的電子二維碼即采用QR-CODE,對(duì)其編碼并加以改進(jìn),通過(guò)識(shí)別并存儲(chǔ)用戶輸入的數(shù)據(jù)字符,從而轉(zhuǎn)換成二維數(shù)組。然后根據(jù)編碼規(guī)范,使用繪圖功能繪制二維碼,最后生成標(biāo)準(zhǔn)的QR-CODE。
1.3 數(shù)據(jù)調(diào)取關(guān)鍵技術(shù)
1.3.1 百度地圖API及定位
百度地圖API主頁(yè)[14]提供給開(kāi)發(fā)者各種資源,其中百度地圖Android開(kāi)發(fā)功能板塊提供了地圖、定位、導(dǎo)航以及全景SDK。
手機(jī)定位分為4種方式:①衛(wèi)星定位(GPS、北斗、伽利略、Glonass);②移動(dòng)基站定位;③WiFi輔助定位;④AGPS定位[15]。本文運(yùn)用前3種定位技術(shù)實(shí)現(xiàn)本地定位:獲本地天氣和POI搜索必須先獲取用戶所在地的經(jīng)緯度,可導(dǎo)入百度地圖相關(guān)應(yīng)用開(kāi)發(fā)包(百度地圖API官網(wǎng)可下載),然后通過(guò)運(yùn)營(yíng)商的數(shù)據(jù)流量、WiFi方式,調(diào)用開(kāi)發(fā)包提供的類方法定位出經(jīng)緯度。
1.3.2 百度地圖POI搜索及路徑規(guī)劃技術(shù)
百度POI(Point of Interest:興趣點(diǎn))搜索:支持周邊檢索、區(qū)域檢索和城市內(nèi)檢索。
周邊檢索:以某一點(diǎn)(用戶所在地)為中心,指定距離為半徑(本文采用2km),根據(jù)用戶輸入的關(guān)鍵詞進(jìn)行POI檢索,可獲得附近的POI,如超市、餐廳、ATM、KTV等信息;區(qū)域檢索:在指定矩形區(qū)域內(nèi)根據(jù)關(guān)鍵詞進(jìn)行POI檢索;城市內(nèi)檢索:根據(jù)用戶輸入的關(guān)鍵字進(jìn)行POI檢索;POI詳情檢索:根據(jù)POI的ID信息檢索該興趣點(diǎn)詳情。
本系統(tǒng)可對(duì)公交詳細(xì)信息進(jìn)行查詢:公交換乘查詢:根據(jù)起、終點(diǎn)進(jìn)行線路規(guī)劃(支持設(shè)置途經(jīng)點(diǎn));步行路徑檢索:支持步行路徑規(guī)劃。
1.4 即時(shí)獲取近3天天氣預(yù)報(bào)
(1)獲取定位地址天氣:高德地圖雖然提供了獲取天氣預(yù)報(bào)接口數(shù)據(jù)信息,但更新十分緩慢或幾乎不更新??紤]到百度地圖地理位置反編碼時(shí)和原有開(kāi)發(fā)類包發(fā)生不兼容的現(xiàn)象,在技術(shù)實(shí)現(xiàn)過(guò)程中使用高德地圖天氣預(yù)報(bào)功能獲取用戶城市中文名稱,根據(jù)高德地圖獲取到的中文城市名再到新浪天氣平臺(tái)獲取詳細(xì)天氣信息。
(2)獲取其它城市天氣:從中國(guó)天氣網(wǎng)接口獲得省份及城市名稱,從而獲取查詢的城市天氣信息。
2 系統(tǒng)軟件設(shè)計(jì)
2.1 MVC設(shè)計(jì)模式
Android界面布局方式分為兩種:①直接在程序代碼中對(duì)UI(User Interface:用戶界面)進(jìn)行布局;②依據(jù)MVC(Model View Controller:即模型-視圖-控制器)模式進(jìn)行設(shè)計(jì)(目前因其擴(kuò)展性較好成為主流的布局方法)。
本文設(shè)計(jì)的系統(tǒng)工程文件中有個(gè)res包,內(nèi)容包括圖片、顏色、布局文件等資源,在不同的xml分布著各式各樣的組件,各組件間具有嚴(yán)格的層次關(guān)系。布局完成之后在代碼中利用setContentView()方法可以將xml加載到程序中,利用代碼控制頁(yè)面。圖1是系統(tǒng)用到的所有XML文件。
以上每一個(gè)xml并不都對(duì)應(yīng)一個(gè)頁(yè)面,有的實(shí)現(xiàn)一條分割線作用,有的只是實(shí)現(xiàn)下拉加載作用等。在功能設(shè)計(jì)上,以找回密碼頁(yè)activity_findpwd.xml為例說(shuō)明。
圖3為人們熟悉的用戶交互頁(yè)面,而圖2是圖3的布局代碼塊,從代碼映射到布局,綜合運(yùn)用了Android特色布局技術(shù)及特色組件功能。想了解更多的布局方式和組件請(qǐng)查看文獻(xiàn)[16]。
2.2 系統(tǒng)程序架構(gòu)
本文設(shè)計(jì)的Android手機(jī)無(wú)憂出行應(yīng)用系統(tǒng)軟件分為6個(gè)模塊,如圖4所示。
設(shè)計(jì)圖中各功能的應(yīng)用場(chǎng)景:
手勢(shì)密碼模塊,程序流程如圖5所示。
新用戶第一次登錄時(shí)先看到引導(dǎo)頁(yè)面(推薦該軟件功能的一些截圖提示),開(kāi)啟體驗(yàn)后跳轉(zhuǎn)到創(chuàng)建密碼頁(yè)面,設(shè)置完用戶繪制的手勢(shì)密碼進(jìn)入登錄密碼頁(yè)面,如果是老用戶登錄可直接進(jìn)入登錄密碼頁(yè)面,繪制專屬自己的手勢(shì)密碼后方能登錄成功進(jìn)入主頁(yè)面。此外,用戶可以修改手勢(shì)解鎖密碼,但是要在用戶輸入之前的密碼匹配成功后才能重新繪制新的密碼,否則提示“與原始密碼不一致”并提供4次機(jī)會(huì)。若繼續(xù)輸錯(cuò)后則將手勢(shì)密碼鎖住(讓繪制手勢(shì)密碼界面不再出現(xiàn)繪制軌跡,并且沒(méi)有任何數(shù)據(jù)傳輸功能),60s后方能修改。若用戶忘記密碼,可通過(guò)找回密碼頁(yè)面輸入第一次創(chuàng)建密碼時(shí)輸入的特殊數(shù)字。若匹配成功,便能重新創(chuàng)建密碼,否則提示“未能準(zhǔn)確匹配,請(qǐng)重新輸入”。
二維碼名片模塊:在EditText輸入姓名、公司、職位、電話號(hào)碼、郵箱等信息后點(diǎn)擊生成二維碼,供對(duì)方友人掃描添加。
天氣預(yù)報(bào)模塊:主頁(yè)面顯示本地今日天氣,包括城市名稱、天氣情況圖標(biāo)和中文漢字、溫度、風(fēng)向參數(shù)。主頁(yè)面還實(shí)現(xiàn)全國(guó)各主要城市的天氣預(yù)報(bào),天氣預(yù)報(bào)除了上述天氣參數(shù)外,還有之后兩天的天氣情況(沒(méi)有風(fēng)向參數(shù))。
公交路線查詢模塊:在主頁(yè)面實(shí)現(xiàn)一個(gè)跳轉(zhuǎn)的按鍵功能,跳轉(zhuǎn)到全國(guó)各地公交線路查詢頁(yè)面,在EditTex中輸入要查詢的城市和公交線路(如:上海市,763路),點(diǎn)擊“查詢”按鈕后便能在地圖上顯示公交車的行駛路線,包括每一個(gè)停靠站點(diǎn)。
POI搜索:點(diǎn)擊主頁(yè)面提供的商家或景點(diǎn)類型,用戶也可自己輸入關(guān)鍵字進(jìn)行搜索,便能獲得該類型周圍2km的所有商家,在ListView列表逐一顯示。若商家數(shù)量較多,利用線程加載逐一顯示;否則提示“未找到結(jié)果”字樣,并隱藏加載條。
路徑規(guī)劃:在POI搜出商家信息后可隨意點(diǎn)擊任意一商家,進(jìn)入到商家詳情信息,顯示百度地圖本地定位范圍,并通過(guò)“顯示路線”按鈕在地圖上顯示起點(diǎn)和終點(diǎn)路線。
3 系統(tǒng)軟件實(shí)現(xiàn)
3.1 手勢(shì)密碼模塊實(shí)現(xiàn)
如圖6、圖7所示,出現(xiàn)在用戶第一次使用該軟件或者忘記密碼后輸入匹配值重新設(shè)置密碼時(shí)都會(huì)出現(xiàn)該頁(yè)面。在EditText輸入格式的屬性設(shè)置為:android:inputType="numberPassword",限制鍵盤彈出格式即為數(shù)字鍵盤,輸入的類型為數(shù)字加密型以提高安全性,此數(shù)值利用SharePreference保存到本地,作為找回密碼的依據(jù),屬于必填項(xiàng),建議用戶輸入記憶較深的數(shù)值,比如用戶的手機(jī)號(hào)碼等。記錄九宮格手勢(shì)的方式是利用數(shù)字記錄,9個(gè)
圓圈分別標(biāo)號(hào)為0-9,如圖5繪制的手型,即為“03678”字符。創(chuàng)建密碼時(shí)九宮格手勢(shì)可以任意繪制,但點(diǎn)擊保存時(shí),寫入系統(tǒng)的SharePreference數(shù)值是以最后一次繪制的手勢(shì)記錄并鎖住鍵盤,若想更改繪制的手勢(shì)點(diǎn)擊“取消”按鈕即可。以上操作繪制完成后點(diǎn)擊保存。
3.2 主頁(yè)及其它頁(yè)面功能
主頁(yè)采用側(cè)滑功能,相比于騰訊QQ主頁(yè)效果更具時(shí)尚感,主頁(yè)布局采用圖形方塊布局,形象生動(dòng),如圖8、圖9所示。
3.3 左側(cè)滑動(dòng)頁(yè)面功能
二維碼電子名片模塊功能效果如圖10所示。
生成二維碼核心代碼:
public Bitmap qr_code(String string,BarcodeFormat format)
throws WriterException {
MultiFormatWriter writer=new MultiFormatWriter();
Hashtable
hst.put(EncodeHintType.CHARACTER_SET, "UTF-8");
BitMatrix matrix=writer.encode(string, format, 400, 400, hst);
int width=matrix.getWidth();
int height=matrix.getHeight();
int[] pixels=new int[width*height];
for (int y=0; y for (int x=0; x if (matrix.get(x, y)) { pixels[y*width+x]=0xff000000; } } } Bitmap bitmap=Bitmap.createBitmap(width, height,Bitmap.Config.ARGB_8888); //通過(guò)像素?cái)?shù)組生成bitmap,具體參考api bitmap.setPixels(pixels,0,width,0,0,width,height); return bitmap;} 其中傳入的string值為String contents="BEGIN:VCARD\\nVERSION:3.0\\n"+"N:"+name+"\\nORG:"+company+"\\nTITLE:"+position+"\\nNOTE:"+note+"\\nTEL:"+phone+"\\nADR:"+add+"\\nURL:"+web1+"\\nEMAIL:"+email+"\\nEND:VCARD";都是用戶輸入的數(shù)據(jù),當(dāng)對(duì)方掃描時(shí)所有信息都會(huì)顯示在對(duì)方手機(jī)上,并且能夠?qū)胪ㄓ嶄?,方便快捷?/p>
天氣預(yù)報(bào)查詢模塊實(shí)現(xiàn)效果如圖11所示。
天氣查詢模塊顯示今、明、后天3天的天氣實(shí)況。
公交車路線查詢功能實(shí)現(xiàn)效果如圖12所示。
本功能實(shí)現(xiàn)的核心代碼:
EditText editCity=(EditText) findViewById(R.id.city);
EditText editSearchKey=(EditText) findViewById(R.id.searchkey);
// 發(fā)起百度地圖poi搜索,并從百度地圖數(shù)據(jù)庫(kù)中獲得所有的公交線路類
// 類型的POI,再使用該poi唯一標(biāo)識(shí)uid進(jìn)行公交詳情搜索
mSearch.searchInCity((new PoiCitySearchOption()).city(
editCity.getText().toString()).keyword(editSearchKey.getText().toString()));
3.4 主體頁(yè)面功能
以點(diǎn)擊第一張小圖片(餐飲)為例,跳轉(zhuǎn)到商戶界面。
圖13是實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)后加載出來(lái)的商家信息,圖14是上拉加載后更多的商家信息。POI搜索功能模塊的關(guān)鍵代碼:
mPoiSearch.searchNearby(new PoiNearbySearchOption()
.location(new LatLng(lat, lng)).pageNum(10).keyword(keyWord).radius(2000).pageNum(num));
必須在類中實(shí)現(xiàn)OnGetPoiSearchResultListener的接口,還有定位獲得的經(jīng)緯度數(shù)據(jù)。上述代碼中keyWord即為“餐飲美食”、“銀行”、“景點(diǎn)”等關(guān)鍵詞,可搜出用戶周圍2km以內(nèi)的商家。
此外,在左側(cè)滑動(dòng)效果“周圍商家”字樣中,可進(jìn)一步根據(jù)用戶需求進(jìn)行POI搜索,如圖15所示。
3.5 商家詳情功能模塊
要想進(jìn)一步了解更多的商家信息,直接點(diǎn)擊圖16中的商家即可,點(diǎn)擊后顯示路線功能模塊。
實(shí)現(xiàn)此模塊功能前要先實(shí)現(xiàn)百度地圖SDK開(kāi)發(fā)包中的一個(gè)重要接口,即OnGetRoutePlanResultListener()接口。
實(shí)現(xiàn)功能主要代碼:
PlanNode stNode=PlanNode.withLocation(new LatLng(sLat, sLng));
PlanNode enNode=PlanNode.withLocation(new LatLng(eLat, eLng));
mSearch.walkingSearch((new WalkingRoutePlanOption()).from(stNode).to(enNode));
4 結(jié)語(yǔ)
基于Android的無(wú)憂出行應(yīng)用軟件系統(tǒng),實(shí)現(xiàn)了二維碼名片、天氣查詢、公交車查詢以及附近商家及路線搜索功能。后續(xù)可根據(jù)用戶體驗(yàn)意見(jiàn),改正不足之處,拓展更多功能,更好地服務(wù)于大眾。
參考文獻(xiàn):
[1] NUR ROKHMAN, LUBAB SAIFUDDIN. Location and time based reminder system on android mobile device[C]. Vienna, Austria,2016 2nd International Conference on Science in Information Technology(ICSITech). Piscataway, New Jersey:IEEE Press,2016:147-151.
[2] SHABTAI A, FLEDEL Y, ELOVICI Y. Securing Android-Powered mobile devices Using SELinux[J]. IEEE Security & Privacy,2010,8(3):36-44.
[3] SHAO G H. Application development research based on android platform[C]. International Conference on Intelligent Computation Technology and Automation. IEEE,2015:579-582.
[4] ADDANKI N. Android application for USDA (U.S. Department of Agriculture) structural design software[EB/OL]. http://www.doc88.com/p-0344526320714.html.
[5] ZAPATA B C. Android studio application development[EB/OL]. https://baike.so.com/doc/24014075-24591709.html.
[6] ROGERS R. Android application development[M]. O′Reilly, 2009.
[7] TAKALA T, KATARA M, HARTY J. Experiences of system-level model-based GUI testing of an android application[C]. IEEE International Conference on Software Testing, IEEE Computer Society, 2011:377-386.
[8] YAN D, YANG S, ROUNTEV A. Systematic testing for resource leaks in Android applications[C].IEEE, International Symposium on Software Reliability Engineering, IEEE, 2013:411-420.
[9] ENCK W, ONGTANG M, MCDANIEL P. Understanding android security[J]. IEEE Security & Privacy,2009,7(1):50-57.
[10] 唐誠(chéng).枚舉Android系統(tǒng)九宮格密碼[J].廈門城市職業(yè)學(xué)院學(xué)報(bào),2013,15(2): 48-50.
[11] ISO/IEC 18004:2000(E)[S].Information technology-automatic identification and data capture techniques-Bar code symbology-QR,2000-6-15.
[12] 肖洪磊.濰坊二維碼門戶管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].濟(jì)南:山東大學(xué),2012.
[13] 馬鳴,李海波.基于Android的二維碼的生成與識(shí)別系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2012,8(9X):6353-6356.
[14] Android地圖SDK[EB/OL]. http://developer.baidu.com/map/index.php?title=androidsdk.
[15] 常見(jiàn)手機(jī)定位方式淺談[EB/OL]. http://www.cnblogs.com/syfwhu/p/5084115.html.
[16] 郭宏志.Andorid應(yīng)用開(kāi)發(fā)詳解[M].北京:電子工業(yè)出版社,2010.
(責(zé)任編輯:杜能鋼)