位置服務 (LBS) 回答三大核心問題:我在哪?周圍有什麼?怎麼去?。JSR 179 (Location API for J2ME) 提供了一套統一、可移植的 API,屏蔽 GPS、基站、藍牙、Wi-Fi 等異構定位技術的差異,讓開發者專注於業務邏輯。
| 技術 | 原理 | 精度 | 優點 | 缺點 |
|---|---|---|---|---|
| 基站 (Cell-ID) | 服務小區標識 | 200m~數公里 | 無額外硬體、功耗低、室內可用 | 精度差、依賴運營商 |
| GPS | 衛星三角測量 | 4~40m (開闊地) | 精度高、全球覆蓋、提供速度/高度 | 需 GPS 晶片、冷啟動慢、耗電、城市峽谷效應差 |
| 短距離信標 (Bluetooth/Wi-Fi) | 信號強度指紋/三角測量 | 1~10m | 室內精準、低功耗 | 需預佈設施、覆蓋範圍小 |
| 網絡輔助 (A-GPS / MPC) | 基站+衛星混合 | 50~150m | 啟動快、室內外均可 | 可能收費、依賴網絡 |
LocationProvider 實現。| 類/接口 | 包 | 核心職責 |
|---|---|---|
LocationProvider | javax.microedition.location | 定位服務抽象,按 Criteria 選擇、獲取 Location、註冊監聽器 |
Criteria | javax.microedition.location | 選擇條件:水平/垂直精度、響應時間、是否需高度/速度、成本限制 |
Location | javax.microedition.location | 定位結果封裝:Coordinates、QualifiedCoordinates、地址文本、時間戳、速度/航向 |
Coordinates / QualifiedCoordinates | javax.microedition.location | 經緯度(度)、高度(米);後者含精度半徑 |
Landmark / LandmarkStore | javax.microedition.location | 地標(名稱+描述+坐標)持久化存儲,跨 MIDlet 共享 |
Orientation | javax.microedition.location | 羅盤方位角(相對正北),導航必備 |
Criteria cr = new Criteria();
cr.setHorizontalAccuracy(500); // 500 米以內
cr.setPreferredResponseTime(30000); // 30 秒超時
LocationProvider lp = LocationProvider.getInstance(cr);
Location loc = lp.getLocation(60); // 60 秒阻塞等待
QualifiedCoordinates qc = loc.getQualifiedCoordinates();
if (qc != null) {
double lat = qc.getLatitude();
double lon = qc.getLongitude();
// 更新 UI、查詢周邊 POI...
}
public class Tracker implements LocationListener {
public void locationUpdated(LocationProvider lp, Location loc) {
// 在事件線程中回調,快速處理並 repaint()
}
public void providerStateChanged(LocationProvider lp, int state) {
// 狀態變化:AVAILABLE / OUT_OF_SERVICE / TEMPORARILY_UNAVAILABLE
}
}
// 註冊:每 10 秒更新一次,無限期
lp.setLocationListener(tracker, 10, -1, 10);
addLandmark()、getLandmark()、deleteLandmark()。getAzimuth() 返回 0~360 度,轉換為羅盤方位(N/NE/E...)指引用戶。javax.microedition.io.Connector.open() 權限控制,用戶必須顯式授權「位置信息」權限。providerStateChanged 切換備選 Provider。JSR 179 以極簡 API 統一了碎片化的定位能力,配合 Criteria 靈活選源、LandmarkStore 本地緩存、Orientation 導航輔助,構建了功能完整的 LBS 開發基座。落地時,「隱私優先、省電其次、體驗為王」應貫穿始終。