吳順利,張 旭,孫 偉,史國濱
(黑龍江八一農墾大學,黑龍江 大慶 163319)
移動互聯時代,移動終端成為大眾獲取富媒體信息的主要手段,手機中APP應用成為大眾獲取信息的主要途徑之一。大學城商圈娛樂設施完備,文化飲食和公共文化活躍。充分發掘此地域圈內人員活動信息可積累大量可用信息。這些信息對實現目標人群精準導向,提高商圈活躍度,提升公共服務質量會有很大幫助。目前大多數手機APP研究集中在如軟件需求分析[1-2]、界面設計[3-4]、某一領域需要[5-7],而對實現相關應用技術細節的文獻[8-10]較少。
手機APP程序需要建立服務器平臺,開發手機端軟件功能。如何實現快速開發,需有一套完整高效的解決方案。本文運用Rest DATASNAP技術,采用跨平臺開發工具DELPHI XE10[11]實現高效的手機軟件開發。目標是開發覆蓋商圈內商家及公共服務設施手機端APP。通過DATASNAP技術以短連接方式,可滿足數千用戶的并發連接,滿足實際的應用需要。
本手機APP實現了分類信息存儲及顯示、商圈設施定位、顯示詳細信息,異步更新提高交互性體驗、用戶信息收集等功能。
系統架構如圖1所示,數據庫存儲采用開源數據庫MYSQL,通過在數據庫中設計地域分類數據表、商家大類和子類分類數據表、商品信息數據表、用戶表、訪問信息表等實現按地域、地理坐標、商品分類、商品名稱、用戶關注度等多級信息的分類顯示,通過存儲訪問信息表,存儲如IP、位置、手機信息、訪問興趣點信息等,可在用戶積累到一定規模后建立大數據信息源,為更加精準的數據服務提供支持。以DELPHI快速建立DATASNAP server三層結構。客戶端與服務器間采用REST方式連接DATASNAP Server并訪問目標mysql數據庫。服務器以TCP/IP短連接方式,通過sqlquery實現接收來自互聯網的客戶端特定的數據庫查詢指令,并通過datasetprovider提供遠程數據訪問服務,可滿足數百至上千用戶的并發連接。與其他開發方案比較[8,12],服務器端程序通用簡化、開發快速,服務器端在同樣并發訪問量下負荷較小,可提供更多用戶的同時訪問能力,整體技術方案可靠、高效,相較其他方案更易于實現。

圖1 系統架構
客戶端功能如圖2所示。

圖2 客戶端功能
啟動畫面為手機端程序的流行方式,主窗體通過菜單提供多個不同分類顯示。各詳細信息窗體顯示如:特定分類信息、興趣點具體信息等。為使手機APP適合各尺寸分辨率的手機,在窗體設計中采用ScaledLayout布局方案,并通過動態獲取窗體尺寸完成頁面對象自適應布局處理。通過自定義窗體顯示內容實現啟動畫面并通過在啟動窗體中使用application.createform 方法,將主界面顯示至前臺并將啟動畫面運用destroy方法銷毀處理。其代碼如下:
Application.CreateForm(TMainform,Mainform);
Mainform.SendToBack;
Mainform.Show;
Mainform.BringToFront;
Mainform.Activate;
Application.MainForm:=Mainform;
Splashform.destroy;

圖3 主界面

圖4 分類顯示頁
主界面圖3底部菜單分類顯示以tabcontrol控件實現,為增強過渡動畫效果,在圖片按鈕區添加BitmapAnimation控件,定義開始和結束圖片,當點擊菜單圖片時觸發動畫過渡切換至其他頁面,從而提供更友好的訪問體驗。
輪換圖片是在程序中建立tabcontrol多標簽頁顯示不同圖片,通過定義timer定時器自動將當前的activetab頁自加,并在顯示最后一個標簽頁時將activetab值設定為tabs[0],從而自動循環。手機中最重要的交互功能就是手勢,通過在tabcontrol中onGesture識別手勢的兩種類型sgiLeft、sgiRight并改變activetab值實現跟隨手勢切換頁面。由右向左滑動部分代碼如下:
case EventInfo.GestureID of sgiLeft:
…
if SlideImg.ActiveTab<>SlideImg.Tabs[SlideImg.TabCount-1]
then begin
SlideImg.ActiveTab=SlideImg.Tabs[SlideImg.TabIndex+1]
else begin SlideImg.ActiveTab:=SlideImg.Tabs[0];
……
APP程序中另一個最重要的內容是,顯示所需的圖文信息,這些信息存儲在遠端的數據庫服務器中,通過用戶點擊、分類篩選,提供定制化的信息。如圖4,客戶端多以listview來顯示用戶篩選信息,通常定義客戶端數據庫連接單元的方式實現。圖5數據訪問方式,是客戶端通過建立sqlconnection連接遠端的DATASNAP服務器,以Dsprovider連接遠端DATASNAPserver特定的ServerMethod類,以ClientDataSet接收遠端服務器的數據流。通過ClientDataSet.CommandText執行特定數據查詢并返回結果。通過手勢上下拉加載分頁后的數據,采用更改動態查詢數據起始序號的方式,設置ListView的OnMouseUp和OnPullRefresh事件來響應上拉和下拉手勢完成數據動態分頁更新,采用此方法可有效降低網絡數據傳輸量,并可減少由于查詢并響應所需時間造成的用戶長時間等待,提升用戶體驗。

圖5 數據訪問方式
Listview中顯示圖片和文本信息是APP中常采取的方法,由于網絡的原因,如果圖片信息同樣存儲在數據庫中將會隨著數據庫信息量的增加,其訪問時長會受到較大影響,為提高交互訪問體驗,采用了以下方法。①數據庫中僅存儲圖片網絡地址的形式,當手機端訪問時借助遠端DATASNAP Server訪問數據庫并提供給手機端,手機端APP按照所獲取的圖片地址去訪問并顯示在手機端,這在一定程度上降低了服務器的負荷,可提供更多、更流暢的客戶訪問體驗。②在手機端通過異步的方法同時獲取接收到的多個圖片,并顯示在手機端,使手機端訪問體驗更佳。③為進一步提供訪問的實時交互性,可將訪問的圖片進行預處理,將圖片按照訪問需要存儲成不同尺寸的文件以加快訪問速度。④圖片異步訪問通過建立圖片訪問的類,以匿名線程的方法,通過idhttp組件獲取圖片數據流并顯示在listview中,防止主窗體假死現象。在異步顯示圖片中,設計預加載圖片,預加載圖片以圖片流形式保存為全局變量,在加載網絡圖片前加載顯示在相應圖片區,在加載網絡圖片后被替換,這使得顯示效果更加理想。⑤在程序中做容錯處理,合理利用try except可防止由于網絡不穩定、訪問異常等造成的程序崩潰事件的發生。通過以上方式,可在上下拉后頁面得到快速更新,效果良好。
POI(point of interest)“興趣點”內信息包括地理位置、名稱、附加圖片及文字信息描述等。各興趣點信息可采用傳統人工實地采集地理坐標、現場拍照、人工分類獲取1手信息,也可采用自動化采集手段,例如通過采集軟件“火車頭”、“八爪魚”[13]等,通過自定義規則,進行如美團網、大眾點評網等分類數據提取并進行人工處理后導入數據庫中。其中最為重要的數據之一是地理坐標信息,美團網采用騰訊地圖,人工實地采集采用GPS坐標,各坐標系統不同,定位精準度和位置偏差較大,可采用坐標轉換工具進行統一轉換[14]。由于多種原因可能造成數據準確度不足,本APP實現采用百度地圖方案,將各種方法采集的坐標通過開放的坐標轉換工具轉換成百度坐標,并根據百度地圖中已知標定的幾個目標興趣點,通過建立一元線性方程進行坐標修正,保證在特定小范圍區域內偏差在10幾米的精度范圍。
在手機APP中采用了webbrowser結合baidu javascript api混合實現手機端的定位與顯示。手機的實時定位以LocationSensor進行gps及wifi雙方式的自動獲取,并以此方式獲取的位置信息做為查詢數據庫獲得周邊信息的位置定界。各“興趣點”的多張圖片信息的顯示,可通過動態獲得手機尺寸,自適應生成圖片列表。除采用異步方式獲取網絡圖片外,當點擊某張圖片時可以放大到手機全屏并實現放大、旋轉等操作。其實現是通過定義窗體的OnGesture事件,在igiRotate和igiZoom中實現。通過Self.ObjectAtPoint(ClientToScreen(EventInfo.Location))獲取圖片對象并控制圖片做旋轉及放大處理。其部分代碼如下:
LObj:=Self.ObjectAtPoint(ClientToScreen(EventInfo.Location));
if LObj is TImage then begin {rotate the image}
LImage:=TImage(LObj.GetObject);
if(TInteractiveGestureFlag.gfBegin in EventInfo.Flags)
then FLastAngle:=LImage.RotationAngle
else if EventInfo.Angle<>0
then LImage.RotationAngle:=
FLastAngle-(EventInfo.Angle*180)/Pi;
獲取用戶信息,如手機廠商、型號、IMEI、安卓版本、位置信息、訪問信息點等是進行數據深度挖掘的基礎,通過調用androidapi.JNI.JavaTypes,Androidapi.Helpers,androidapi.JNI.Os;并調用TJBuild.JavaClass.MODEL、TJBuild_VERSION.JavaClass.RELEASE、TJBuild_VERSION.JavaClass.RELEASE可獲取到設備相關信息,通過執行sql insert命令將信息存儲于遠端數據庫,對用戶登錄后訪問的興趣點信息進行記錄和傳回服務器端,實現用戶端信息采集做為大數據信息源,為后繼精細化數據服務提供支持。
本文運用Delphi跨平臺開發工具,以Rest DATASNAP技術開發多層架構手機APP平臺,詳細描述了系統整體結構和技術實現。采用以上的設計思想,可滿足中小型用戶量的手機APP應用需要,在開發周期、易用性、安全可靠能力上都滿足需要,解決了手機APP開發整體方案中技術難點及實現細節參考資料缺乏的不足,是開發互聯網環境下手機APP的一套快速開發的成熟解決方案。
參考文獻(References):
[1]劉丹,胡衛星,李玉斌,李暢.移動教育APP的研發現狀與應用問題分析[J].電化教育研究,2016.8:47-52
[2]馬玉慧,趙樂,李南南,王碩爍.新型移動學習資源——教育APP發展模式探究[J].中國電化教育,2016.4:64-70
[3]譚坤,劉正宏,李穎“.非遺”傳承創新語境下的APP界面設計研究[J].包裝工程,2015.8:60-3,115
[4]鄭文靜,殷俊.基于O2O模式的外賣訂餐APP的設計研究[J].藝術與設計(理論),2015.9:101-3
[5]陳俊杰,黃國凡.移動圖書館APP的構建策略和關鍵技術——以iOS為例[J].現代圖書情報技術,2012.9:75-80
[6]楊艷妮,明均仁,張杰.基于Android的移動圖書館APP功能設計與實現[J].圖書館學研究,2015.7:24-30,23
[7]周宇,尹生強,王冬青,王英杰.基于Eclipse和Android系統的App開發平臺搭建研究[J].青島大學學報(工程技術版),2016.3:49-53
[8]黃悅深.基于HTML5的移動Web App開發[J].圖書館雜志,2014.7:72-7
[9]張言林,李博,王文博,張財學,張劉通.基于數字化校園的手機app客戶端設計初探——東北林業大學“移動校園”手機APP客戶端設計[J].設計,2014.2:81-2
[10]張利軍.智能手機APP應用前景及發展瓶頸探析[J].電子技術與軟件工程,2015.10:69
[11]高勇.Delphi XE6 Android編程入門教程[M].西安出版社,2014.
[12]韓文智,駱文亮.Android平臺的移動APP開發方法與應用研究[J].四川理工學院學報(自然科學版)2015.3:22-6
[13]崔玉潔,廖坤.借助八爪魚采集器實現過刊網刊元數據的自動提取[J].編輯學報,2016.5:485-8
[14]姜楠.坐標轉換算法研究與軟件實現[D].安徽理工大學碩士學位論文,2013.