2010年4月9日 星期五

【分享】- HTC Hero 上到底有沒有 A-GPS?

當初買 Hero 的時候,上 Google 搜到一堆 HTC Hero 的規格資料,都說有支援 A-GPS,但漁郎在 Hero 手機上找了老半天,也翻遍了隨附的使用說明文件,就是找不到 A-GPS 的設定與啟用的方法。




於是乎直接打電話去 HTC 客戶服務問,答案是:Hero 沒 A-GPS 功能 (此非標準答案,後面還有說明),但上網拜 Google 大神,卻找到一堆 Hero 介紹都說有支援 A-GPS,哇哩咧,怎回事 ? 漁郎不信邪,連上去 HTC 官網瞧瞧 Hero 的規格‧‧‧還真沒 A-GPS 咧!客服說~ 應是之前有寫,可能是複製到了其他機子的資訊了‧‧‧@@ 昏倒 ‧‧‧

唉~ 網路上的資訊果真是真假難辨阿 ~~~

HTC Hero 官網 : http://www.htc.com/tw/product/hero/specification.html

然後咧~ 戲還沒完喔!漁郎昨日發 E-mail 過去 HTC 客服信箱的工程師打電話來,給了我 一個非常詳盡與完整的答案!原來阿,所謂的 A-GPS 是學術理論的用語,在實作上經由「行動網路」基地台或「WiFi」AP的座標所偵測出來的三角定位,就是 A-GPS,只要在 Hero 手機上的「MENU」->「設定」->「位置」中勾選「使用無線網路」(使用 WiFi / 或行動網路來決定位置),就是啟用 A-GPS 功能,但定位的精準度因地而異,從幾公尺到幾公里都有可能。還有個重點,有 Hero 機,不用去開通中華電月租 99 元 A-GPS 服務,因為那個服務是針對沒 A-GPS 功能的手機開的,差點被拐了 @@,現在回想一下,前面的那個客服小姐說話的感覺,聽起來好像有點那麼的遙遠說~~好像是透過網路語音連到別的地方的‧‧‧。


漁郎在這兒給 HTC 的工程師拍拍手!非常專業 !

原來~ HTC Hero 還是有 A-GPS 功能的 ^___^

6 則留言:

  1. 請問~
    Android不是利用CELL ID定位的嗎?
    就是以基地台的識別號對應基地台的地理位置來定位
    所以最後結果是一個圈圈的『範圍』
    而A-GPS不是需要電信業者合作提供定位需要的資訊才有辦法做三角定位的運算嗎?

    回覆刪除
  2. 是阿, 漁郎那天也因 A-GPS 的定義問題跟 HTC 的工程師『盧』了很久, 其實, A-GPS 的定義可參考這裡(英文): http://en.wikipedia.org/wiki/Assisted_GPS, 而就 Android 而言, 漁郎在使用了 HTC Hero 半年以來, 只知其除了可用 GPS 定位外(室外), 亦可用 WiFi 或 行動網路 來定位(室內), 據 HTC 工程師的說法, 其 WiFi/行動網路 定位的功能, 就相當於是 A-GPS , 也就是說符合 A-GPS 在學術上的說法, CELL ID 定位其實就是『行動網路(CELL PHONE)』定位, 並配合網路下載星圖對應 CELL ID, 然而, 據 HTC 工程師的說法, 其手機內定在使用『行動網路定位』時, 會使用 Google 提供的星圖(還是要透過網路下載,不知是透過 HTC 主機還是直接從 Google 下載 ? 這個漁郎沒問工程師), 所以, HTC 工程師才會說不用開通中華電的 A-GPS 服務 (漁郎跟那個工程師確認了好幾次). 漁郎由於最近撰寫 Help Me! SOS 的程式, 顧慮到人們求救有時會在室內, 所以, 才會特別打電話去『盧』HTC 工程師的, 程式也測試了好久, 也因此有了以上的說法.

    回覆刪除
  3. 我也在寫AGPS的程式,用的是HTC Magic,只是我在set Criteria裡頭的定位精確度的時候,卻沒辦法調整成ACCURACY_FINE

    回覆刪除
  4. 不知您的程式寫法為何? 漁郎提供以下程式片段參考參考.

    (1) manifest.xml 裡要開啟 GPS 授權外

    android.permission.ACCESS_FINE_LOCATION
    android.permission.ACCESS_COARSE_LOCATION

    (2) 主程式碼裡漁郎是這樣寫的 :
    // 重尋最佳定位提供者與啟動定位更新服務
    private void getAndStartMgrLocationUpdate() {
    // 開啟 Location Listen , 以追蹤定位
    Criteria criteria = new Criteria();
    // 最佳定位服務提供者額外判斷過濾條件
    setupCriteria(criteria);
    // 取得最佳定位服務提供者
    best = mgr.getBestProvider(criteria, true);
    // 如有最佳定位服務提供者,則重新取得定位參數
    if (best != null) {
    // 取得最佳定位服務提供者之定位數據
    // 要求更新位置資訊,且設定使用那個定位服務提供者之
    // 最短更新延遲時間 minTime (1000 = 1 秒)
    // 與 最短移動通知距離 minDistance (米),
    // 及 地點改變時呼叫哪個物件的
    // onLocationChanged 方法 (例如 mll 或 this)
    mgr.requestLocationUpdates(best, 60000,
    1, mll); // 60000 = 1 分鐘 , 1 = 1 公尺
    // 顯示定位點圖示
    mOverlay1.enableMyLocation();
    } else {
    // 次佳定位服務提供者額外判斷過濾條件
    setupCriteriaSec(criteria);
    // 試著取得次佳服務提供者
    best = mgr.getBestProvider(criteria, true);
    // 如有次佳定位服務提供者,則重新取得定位參數
    if (best != null) {
    // 取得次佳定位服務提供者定位數據
    mgr.requestLocationUpdates(best, 60000,
    1, mll); // 60000 = 1 分鐘 , 1 = 1 公尺
    // 顯示定位點圖示
    mOverlay1.enableMyLocation();
    } else {
    // 如沒有最後定位資訊參數,則顯示錯誤訊息
    mLoc.setText(getResources()
    .getString(R.string.str_wait_location));
    }
    }
    }

    private void setupCriteria(Criteria criteria) {
    // 最佳定位服務提供者額外判斷過濾條件 - HERO 中如開啟使用 WiFi/行動網路定位 , 會被視為 ACCURACY_FINE
    criteria.setPowerRequirement(Criteria.POWER_LOW); // 電量需求:Criteria.POWER_HIGH (高電量)、Criteria.POWER_LOW (低電量)、Criteria.POWER_MEDIUM (中電量)
    criteria.setAccuracy(Criteria.ACCURACY_FINE); // 定位經準度:Criteria.ACCURACY_FINE (良好)、Criteria.ACCURACY_COARSE (粗略)
    criteria.setAltitudeRequired(true); // 是否需能提供高度資訊:true (需要)、false(不需要)
    criteria.setBearingRequired(false); // 是否需能傳回相對位置:true (需要)、false(不需要)
    criteria.setSpeedRequired(true); // 是否需能提供速度資訊:true (需要)、false(不需要)
    criteria.setCostAllowed(true); // 是否允許收費:true (允許)、false(不允許)
    }

    private void setupCriteriaSec(Criteria criteria) { criteria.setPowerRequirement(Criteria.POWER_LOW); // 電量需求:Criteria.POWER_HIGH (高電量)、Criteria.POWER_LOW (低電量)、Criteria.POWER_MEDIUM (中電量) criteria.setAccuracy(Criteria.ACCURACY_FINE); // 定位經準度:Criteria.ACCURACY_FINE (良好)、Criteria.ACCURACY_COARSE (粗略)
    criteria.setAltitudeRequired(false); // 是否需能提供高度資訊:true (需要)、false(不需要)
    criteria.setBearingRequired(false); // 是否需能傳回相對位置:true (需要)、false(不需要)
    criteria.setSpeedRequired(false); // 是否需能提供速度資訊:true (需要)、false(不需要)
    criteria.setCostAllowed(true); // 是否允許收費:true (允許)、false(不允許)
    }

    回覆刪除
  5. 基本上就是以有無提供速度與高度為區別, 判定使用 GPS 或 A-GPS . 能提供 速度與高度 數據, 就是 GPS , 不然就判為 A-GPS .

    回覆刪除
  6. 在漁郎開發的『求救發訊器』程式中, 只要使用者開啟 GPS , 則無論有無開啟 A-GPS , 都會只抓 GPS 提供的定位參數. 如在室內使用, 則必須關閉 GPS , 程式才會改抓 A-GPS 提供的參數.

    回覆刪除