行動裝置定位服務 (LBS) 爆發性成長,但早期各廠商 API (Nokia Landmarks, Motorola GPS, Sony Ericsson Cell-ID) 互不相容。JCP 制定 JSR-179 Location API for Java ME**,提供統一、可攜式的定位抽象層,支援 GPS、蜂窩基地台三角測位、A-GPS、Wi-Fi 定位等多種方法,並內建地標 (Landmark) 儲存與接近偵測 (Proximity) 功能。本文基於 Nokia 官方技術白皮書 (S60 3rd Edition / Series 40 3rd Edition) 深度解析核心架構。
float/double)。microedition.location.version 存在 (如 "1.0") 表示裝置支援。| 類別/介面 | 職責 | 關鍵方法 |
|---|---|---|
Criteria | 定位品質需求描述 (精度、功耗、成本、回應時間…) | setHorizontalAccuracy(), setCostAllowed(), setSpeedAndCourseRequired() |
LocationProvider | 定位服務提供者抽象 (GPS、Cell-ID、A-GPS…) | getInstance(Criteria), setLocationListener(), addProximityListener(), getLocation() |
LocationListener | 非同步接收位置更新與提供者狀態變更 | locationUpdated(Provider, Location), providerStateChanged(Provider, int) |
ProximityListener | 偵測進入/離開指定地標半徑範圍 | proximityEvent(Coordinates, Location), monitoringStateChanged(boolean) |
Location | 標準化位置資訊封裝 (座標、時間、速度、精度、地址) | getQualifiedCoordinates(), getSpeed(), getAddressInfo(), getTimestamp() |
Coordinates | 基本經緯度/海拔座標 | getLatitude(), getLongitude(), getAltitude() |
QualifiedCoordinates | 含精度資訊的座標 (誤差半徑、信心度) | getHorizontalAccuracy(), getVerticalAccuracy() |
AddressInfo | 結構化地址資訊 (國家、縣市、街道、門牌、建築物…) | getField(int), setField(int, String), 常數 COUNTRY, STREET… |
Landmark | 單一地標實體 (名稱、描述、座標、地址、類別) | 建構子 Landmark(name, desc, coords, addr) |
LandmarkStore | 地標持久化存儲 (跨 MIDlet 共享、分類管理) | getInstance(name), createLandmarkStore(), addLandmark(), getLandmarks(), deleteLandmark() |
Orientation | 裝置方位感測器抽象 (方位角、俯仰角、翻滾角) | getOrientation(), getAzimuth(), getPitch(), getRoll(), isOrientationMagnetic() |
LocationException | 定位操作失敗原因封裝 | 錯誤代碼:UNAVAILABLE, TEMPORARILY_UNAVAILABLE, PROVIDER_UNAVAILABLE… |
| 方法 | 原理 | 典型精度 | 耗電 | 成本 | 適用場景 |
|---|---|---|---|---|---|
| GPS (衛星) | 接收 4+ 顆衛星訊號三角測位 | 5-15 公尺 | 高 | 免費 (衛星訊號) | 戶外導航、運動追蹤、測量 |
| Cell-ID (基地台) | 服務基地台小區識別碼 + 鄰區測量 | 200 m - 數公里 | 極低 | 可能計費 (網路查詢) | 室內/都會區粗略定位、LBS 觸發 |
| A-GPS (輔助 GPS) | 網路下載星曆/粗略位置加速 GPS 定位 | 5-15 公尺 | 中 | 可能計費 (資料傳輸) | 冷啟動加速、室內邊緣增強 |
| Wi-Fi 定位 | 掃描周圍 AP MAC + 信號強度比對資料庫 | 20-50 公尺 | 中 | 免費 | 室內商場、機場、地下街 |
關鍵觀念:應用程式透過 Criteria 表達需求,實作自動選擇最符合的 LocationProvider。不可硬編碼指定「一定要 GPS」。
Orientation.isOrientationMagnetic() 可判斷感測器參考基準。導航應用需自行修正磁偏角。NMEA 0183 格式軌跡檔 (GPS 模擬資料),模擬裝置移動。Route 工具 (prefs.exe):錄製/編輯/回放座標軌跡,產生 NMEA 檔供模擬器讀取。連結前綴:https://code.yunyiwangluo.com/bianchen/UploadFiles_4619/201701/,檔名:2017011209311898.jpg, 2017011209311807.jpg, 2017011209311973.jpg, 2017011209311995.jpg。
LocationListener/ProximityListener 避免輪詢浪費電量。LandmarkStore 跨應用程式共享 POI 資料,避免重複輸入。Orientation 介面隔離,無指南針裝置優雅降級。掌握此架構,即可開發出跨 Nokia S60/S40、Sony Ericsson、Motorola 等所有支援 JSR-179 裝置的 LBS 應用。