首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

J2ME 定位 API (JSR-179) 開發指南:核心架構與關鍵類別完整解析

     編輯:J2ME

前言:為什麼需要 JSR-179?

行動裝置定位服務 (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) 深度解析核心架構。

執行環境需求

  • CLDC 1.1** (需浮點運算支援 float/double)。
  • MIDP 2.0** 或更新版本。
  • 系統屬性 microedition.location.version 存在 (如 "1.0") 表示裝置支援。

核心類別速查表 (javax.microedition.location)

類別/介面職責關鍵方法
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」。

地理座標系統基礎 (WGS-84)

  • 緯度:-90° (南極) ~ +90° (北極),赤道 0°。平行線長度隨緯度遞減 (赤道 1° ≈ 111.3 km, 60° ≈ 55.8 km)。
  • 經度:-180° ~ +180°,本初子午線 (格林威治) 為 0°。WGS-84 參考橢球體與傳統子午線約差 100 公尺。
  • 海拔**:相對 WGS-84 橢球體面的高度 (非平均海平面),單位公尺。
  • 磁北 vs 真北**:磁北極每年漂移數十公里,Orientation.isOrientationMagnetic() 可判斷感測器參考基準。導航應用需自行修正磁偏角。

開發與測試環境

  • S60 3rd Edition FP1 SDK** 內建位置模擬器:可載入 NMEA 0183 格式軌跡檔 (GPS 模擬資料),模擬裝置移動。
  • Route 工具 (prefs.exe):錄製/編輯/回放座標軌跡,產生 NMEA 檔供模擬器讀取。
  • 真機測試不可省略**:模擬器無法模擬 GPS 冷啟動時間、多徑效應、室內訊號遮蔽、電池溫度對 GPS 晶振影響。

圖片資源 (原文保留連結)

  • 架構圖:MIDlet → LocationProvider → GPS/Network/Hybrid → 衛星/基地台
  • 經緯度示意圖:赤道、本初子午線、極點標註
  • Route 工具介面截圖:座標編輯、載入/儲存/套用按鈕

連結前綴:https://code.yunyiwangluo.com/bianchen/UploadFiles_4619/201701/,檔名:2017011209311898.jpg, 2017011209311807.jpg, 2017011209311973.jpg, 2017011209311995.jpg。

總結:JSR-179 設計哲學

  1. 抽象定位方法**:應用只關心「精度、成本、功耗」,不綁定具體技術。
  2. 非同步事件驅動**:LocationListener/ProximityListener 避免輪詢浪費電量。
  3. 地標共享儲存**:LandmarkStore 跨應用程式共享 POI 資料,避免重複輸入。
  4. 方位感測器可選**:Orientation 介面隔離,無指南針裝置優雅降級。

掌握此架構,即可開發出跨 Nokia S60/S40、Sony Ericsson、Motorola 等所有支援 JSR-179 裝置的 LBS 應用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved