我的應用所需許可權都已全部開啟,定位資料依然不準確?
近期華為開發者論壇有收到開發者提問:我的應用 app 需要呼叫 GPS 的位置服務,已經將應用所需要的所有許可權全部開啟,而且使用了 wifi 和 4G 網路,手機的耗電管理和聯網管理等設定也全部為 app 開放,但使用標準 Android 介面呼叫的 GPS 位置和速度資料依然非常不準確,怎麼解決呢? 問題連結
Android 原生定位優缺點分析
提問的開發者在應用中呼叫的是 Android原生的介面進行定位。
Android 原生定位提供 GPS定位和網路定位兩種模式。 GPS定位支援離線定位,依靠衛星,沒有網路也能定位,精度高,但功耗大,因需要開啟移動裝置中的 GPS定位模組,會消耗較多電量;蒐集衛星、計算資料工作比較耗時,通常導致初次定位較慢;且由於需要接收衛星訊號,易受環境、地理位置影響,即訊號的接收容易受天氣,以及建築等遮擋物的影響,隧道、山區等地訊號通常較差,高聳的建築物、密集的樓房、屋頂、牆壁,都會影響 GPS接收訊號導致定位不準。
Network 定位(網路定位),定位速度快,只要具備網路或者基站要求,在任何地方都可實現瞬間定位,室內同樣滿足;功耗小,耗電量小;但定位精度差,容易受干擾,在基站或者 WiFi數量少、訊號弱的地方定位質量較差,或者無法定位;必須連線網路才能實現定位。
上述的兩種定位模式都有各自的優缺點,提問的開發者在應用中呼叫 Android原生的介面進行定位,傳統的 GPS定位精度只有 3-7米,而我國城市主幹道單一車道寬一般是 3.75米,也就是說 GPS無法做到車道線級定位。尤其在城市道路或峽谷中,精度會進一步下降。
那麼除了呼叫原生的介面獲取定位以外,還有其他解決辦法嗎?
華為定位服務
華為定位服務( Location Kit)是華為為開發者提供的一項定位能力。採用衛星導航系統( Global Navigation Satellite System,簡稱 GNSS)、 Wi-Fi、基站等多途徑的混合定位模式進行定位,應用可快速、精準地獲取使用者位置資訊。
當前華為定位服務提供的主要能力包含三個部分:融合定位、活動識別和地理圍欄。開發者可以根據自己的需求,呼叫相應的能力。
其中 活動識別功能透過加速度感測器、蜂窩網路資訊、磁力計識別使用者運動狀態,便於透過了解使用者行為來調整應用。 地理圍欄功能可以透過 API設定感興趣的位置區域,在指定操作(如離開、進入、駐留)發生時,手機即可及時收到一個通知。 融合定位功能結合 GNSS、 Wi-Fi和基站位置資料,提供一套簡單易用的 API,可以更方便快速獲取裝置位置資訊,實現精準定位。
融合定位:基於多用途的融合定位,實現精準定位
隨著 5G通訊技術的開展,融合定位技術融合了目前市面上的所有定位方式,包括 GNSS、 Wifi定位、基站定位、藍芽定位以及感測器定位,可謂定位技術集大成者。
GNSS 在首次定位時,由於要重新獲取星曆資訊,搜星後才能進行定位。當 GNSS訊號弱時,可以快速進行輔助定位,增加定位成功率,實現精準定位。且可以根據手機的電量去選擇合適的定位方式,在手機電量低時,避免 GNSS定位產生功耗。
如何持續獲取位置資訊?
如果希望應用可以持續獲取裝置位置,可以使用定位服務提供的 ` requestLocationUpdates ()` 介面。該介面根據入參形式的不同,將以兩種不同的形式將位置資訊返回。一種是透過呼叫已經定義的 ` LocationCallback ` 類中 ` onLocationResult ()` 回撥方法返回一個包含位置資訊的 ` LocationResult ` 物件,另一種是將位置資訊置於 PendingIntent擴充套件資訊中返回。
當應用程式不再需要接收位置更新時,應當停止位置更新,以便於降低功耗。要停止位置更新,可以呼叫 ` removeLocationUpdates ()` ,傳入與 ` requestLocationUpdates ()` 介面相對應的 ` LocationCallback ` 或 PendingIntent物件。這裡以回撥方式作為樣例,程式碼如下。詳細的引數說明請參見 ` LocationService ` 介面說明。
1. 設定持續定位請求引數。
LocationRequest mLocationRequest = new LocationRequest(); // 設定位置更新的間隔(單位為毫秒) mLocationRequest .setInterval(10000 ); // 設定定位型別 mLocationRequest .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
2. 定義位置更新回撥。
LocationCallback mLocationCallback ; mLocationCallback = new LocationCallback() { @Override public void onLocationResult(LocationResult locationResult ) { if ( locationResult != null) { // 處理位置回撥結果 } } };
3.
呼叫
requestLocationUpdates
()進行持續定位。
fusedLocationProviderClient .requestLocationUpdates(mLocationRequest, mLocationCallback, Looper.getMainLooper()) .addOnSuccessListener(new OnSuccessListener<Void>() { @Override public void onSuccess(Void aVoid) { // 介面呼叫成功的處理 } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(Exception e) { // 介面呼叫失敗的處理 } });
4.
呼叫
removeLocationUpdates
()停止位置更新。
// 注意:停止位置更新時,mLocationCallback必須與requestLocationUpdates方法中的LocationCallback引數為同一物件。 fusedLocationProviderClient.removeLocationUpdates(mLocationCallback) // 停止位置更新成功監聽回撥 .addOnSuccessListener(new OnSuccessListener<Void>() { @Override public void onSuccess(Void aVoid) { // ... } }) // 停止位置更新失敗監聽回撥 .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(Exception e) { // ... } });
欲瞭解更多詳情,請參閱:
華為定位服務官網: https://developer.huawei.com/consumer/cn/hms/huawei-locationkit?ha_source=hms1
原文連結:https://developer.huawei.com/consumer/cn/forum/topic/0202524842524900621?fid=18
原作者: 胡椒
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69970551/viewspace-2768500/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用了 sudo 卻依然顯示許可權不夠的原因
- 通過資料庫鏈執行DML所需許可權資料庫
- SAP BTP Launchpad Service 打不開應用的許可權問題
- Oracle 資料庫安全許可權配置標準Oracle資料庫
- 如何設計應用系統的資料許可權管理
- 類的許可權與應用
- [PolicyException: 無法獲取所需的許可權。]Exception
- 資料許可權
- MAC 開啟root許可權Mac
- 如何在資料庫中進行RBAC許可權應用資料庫
- 資料分析的許可權控制
- 資料庫的許可權管理資料庫
- 協同平臺檢視許可權開啟業務物件提示"當前使用者沒有許可權!請檢查使用者[BOS設計器]的[編輯]許可權與應用的編輯許可權!"物件
- iOS 10設定應用許可權iOS
- MySQL資料庫許可權體系入門(5)---管理資料庫許可權MySql資料庫
- 前端單頁面應用的許可權管理前端
- SpringSecurity許可權管理系統實戰—九、資料許可權的配置SpringGse
- Oracle的物件許可權、角色許可權、系統許可權Oracle物件
- Mac 開啟和關閉root許可權Mac
- win10系統如何開啟管理員許可權 win10開啟管理員許可權的圖文教程Win10
- 許可權+訂單資料模型模型
- 資料安全之許可權控制
- 如何檢測應用通知許可權?如何跳轉通知許可權設定頁?
- MacBook如何開啟微信攝像頭的許可權?Mac
- Oracle 使用者許可權管理與常用許可權資料字典列表Oracle
- SAP BO: 資料夾的許可權管理
- 開源許可權引擎祭奠高考:祭奠我們的高考。
- 許可權控制庫 Casbin 在 Slim 中的應用
- 自定義Android應用的訪問許可權Android訪問許可權
- 永久開啟user版本adb root許可權
- MYSQL 開啟root遠端登入許可權MySql
- 提取使用者許可權或是不同資料庫使用者許可權的同步資料庫
- 【專案實踐】一文帶你搞定頁面許可權、按鈕許可權以及資料許可權
- Es資料彙總不準確的問題
- ylbtech-許可權管理-資料庫設計-功能許可權管理技術資料庫
- MySQL資料庫許可權體系入門(4)---管理全域性許可權MySql資料庫
- 查詢沒有許可權但資料字典中顯示有許可權
- win10系統fonts資料夾沒有開啟的許可權如何獲取Win10