4 例子:移動應用開發的定位和定位檢測
Location and orIEntation detection in mobile application development
MIDP: Location API Example - Tourist Route MIDlet(可以從http://www.forum.nokia.com/info/sw.nokia.com/id/f7e8ad78-7898-4053-ab83
MIDP_Location_API_Example_Tourist_Route_v1_0.zip.Html下載)的目的,正如指導書中描述的,目的是為了從技術的角度說明API定位的方法。MIDLet通過Location Provider更新位置信息(比如GPS模式)。這些信息將顯示給使用者,並附帶地址信息傳遞給指定的編輯器。但是MIDLet並不是真實的指導,如果對MIDLet感興趣,跳過本部分直接閱讀18頁。
注意:下面的實例在SerIEs 40平台不能正常執行。
4.1 MIDLet的用戶接口
實例中MIDLet所包含的API特性並非支持所有的設備。比如,不支持方向源的設備在TouristRouteMIDLet中就不會有cmpass特性。下面的圖標說明了典型的MIDLet使用流程。開始,MIDLet嘗試連接定位提供商。這個過程中,實際設備中將顯示發現的所有蘭芽設備的列表。但是比如PrototypeSDK模擬器將會跳過藍牙設備的顯示,而是馬上開始搜索位置信息。當發現了可以連接的設備,TouristRoute MIDlet跳轉到Route vIEw開始更新位置信息。
圖7:MIDLet啟動到陸標的增加的屏幕顯示流程
支持orIEntation的設備和模擬器還會有一個Commpass命令。選擇Compass命令跳轉到commpass界面。選擇Pitch和Roll命令將會分別跳轉到Pitch和Roll界面。本指導中的API支持roitation。
從代碼的角度來看,TouristRoute的使用從TouristUI開始,該程序顯示了設備目前的位置。從TouristUI,用戶既可以跳轉到LandMarkEditorUI類也可以調准到CompassUI類。跳轉到CompassUI需要設備對oritation的支持。CompassUI類可以調轉到PitchRollUI類。另外,所以得UI類都支持跳轉到剛才的界面。請看下圖:
圖8:MIDLET的UI變化說明
UI類的主要功能如下:
l LandmarkEditorUI列舉所有陸標。也可以創建和刪除一個路標。
l TouristUI顯示設備當前位置信息,比如經度緯度坐標,移動速度和距離。
l CompassUI描繪了一個界限。另外,顯示了界限的相關信息。
l PitchRollUI,如果設備支持3D探測器,將引導顯示設備pitch和roll信息。
4.2 需求
本實例中需要S60 SDK支持包
注意:本指導中案例不能在SerIEs 40平台下運行。
4.3 運行Tourist Route MIDlet
在TouristRoute MIDlet實例中,所有UI類都在com.nokia.example.location.tourist.ui包中。模版類可以從com.nokia.example.location.tourist.model中找到。本類中,只有模版中的類可以正常使用API。模版類這一層的類是最值得關注的。UI層的類僅僅包含了MID特殊UI應用程序,但是對於學習如何使用API沒有什麼幫助。另外,命令控制邏輯是在UI類中編輯的。下面的圖標說明了他們之間的關系。
圖9:TouristRoute MIDlet類編程
模版層類和接口包括以下功能:
l ControlPoints處理所有與陸標相關的任務;
l TouristData通過LoacationListener和ProximityListener監聽事件,通過TouristUI類處理數據更新。
l ProviderStatusListener是一個用來處理定位提供商的接口。另外,該接口還用來處理位置更新。TouristRouteMIDlet監聽事件也通過這個接口。
ConfigurationPorvider類用來在程序開始的時候處理LOcationProvider選擇。一個定位服務提供商選擇了以後,ProviderSelectedListener接口就將一個信號返回給MIDlet。另外,oritation支持和orIEntation類訪問也屬於這個類。
啟動過程
TouristRoute MIDlet啟動的時候自動搜索定位服務。當發現定位服務和MIDLet可以接受信息更新的時候,就可以使用MIDLet了。本節的目的就是為了說明TouristRoute MIDlet的啟動流程。
通過基於網絡的定位服務可能需要付費。TouristRoute首先掃描免費的定位服務,如果沒有發現,TouristRoute詢問用戶是否使用該定位服務。
下面的圖表演示了如何搜索定位服務。首先,MIDLet搜索免費定位服務,如果沒有發現,MIDLet詢問用戶是否搜索付費定位服務。如果免費定位服務成功搜索,掃描就結束。當發現了定位服務並選擇了,MIDLet運行providerSelectedEvent()。
同時,MIDLet從注冊的定位服務中注冊。第一次計算可能耗費時間比較長。這也是locationUpdated()運行在TouristData類的時候時間比較長的原因。當運行第一個locationUpdated()事件的時候,firstLocationUpdateEvent()函數就被傳送到了TouristMIDlet類。就在這個階段,UI應用程序變成可見。
注意:有些定位程序可能耗費時間比較長,也可能因為制作的不同而狀態不同。也就是說,第一個定位啟動的時候可能需要很長時間。