[英]requestLocationUpdate takes too long
我只有一台設備 (HTC HD Deside) 用於測試我的應用程序以及何時我想通過以下方式獲取 GPS 數據
locationManager.requestLocationUpdate(criteria,0,0,this); //critera = "gps"
我的 GPS 圖標出現在通知欄中,但它“閃爍”,好像這意味着我的設備正在尋找並獲取 GPS 數據。 因此,我的應用程序需要太多的“思考”時間才能成功從 GPS 獲取數據(約 100 萬到 300 萬!)(在圖標停止閃爍之前)
所以,我不得不創建一個像這樣的 while 指令:
do{
lastLocation = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
}while(System.currentTimeMillis() - lastLocation.getTime() > 5000);
謝謝,我肯定會得到一個最近的位置,但我失去了太多時間。
有什么問題? 是硬件嗎? 我能找到更好的方法來解決這個問題嗎? 我可以“快速”獲取 GPS 數據嗎? :/ (1~5 秒)
我認為您應該在開發位置感知應用程序之前閱讀此http://developer.android.com/guide/topics/location/strategies.html指南。
GPS 傳感器需要 1 到 3 分鍾才能修復,您無法快速修復(1 到 5 秒即可)。
您應該使用最后一個已知的位置值並開始請求位置修復。 當你有一個時,你相應地刷新你的內容。
當您在建築物內或覆蓋區域內時,GPS 傳感器可能需要更多時間。 有時,如果您在建築物內並且沒有可用的 GPS 信號,則它總是閃爍並消耗大量電池電量。 嘗試使用其他一些提供程序。
您是否連接到數據網絡?
我不了解 HTC,但通常當數據連接可用時,該設備會使用一種稱為輔助 GPS 的東西。 從服務器下載衛星星歷,而不是掃描地平線上的所有可見衛星,獲得修復所需的時間為 10-20 秒。
也有可能您在室內或低信號區域,或者您的天線有問題。
使用市場上的 GPS 測試應用程序檢查天線是否有問題(通過比較兩個設備)。
GPS 提供商有時會消耗電池電量,並且還需要檢索 GPS 信號、預熱硬件然后獲取位置,如果第一次使用它,這可能需要一些時間。
我建議使用新的 LocationRequest,如果需要,它將在 GPS 或 NETWORK 之間進行選擇以獲取位置。
在 onCreate 我設置我的位置請求
private fun setupLocationRequest(){
locationCallback = LocationCallback()
locationRequest = LocationRequest.create()
locationRequest.interval = 10000
locationRequest.fastestInterval = 2000
locationRequest.priority = LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
}
正如您在此處看到的, PRIORITY_BALANCED_POWER_ACCURACY
將為我提供一個經緯度的最大距離塊,並且不僅會使用 GPS,還會在需要時使用 NETWORK。
然后,我首先請求lastKnowLocation
,如果未檢索到此位置,則可以請求位置更新
fusedLocationClient.lastLocation.addOnSuccessListener { lastLocation ->
if(lastLocation != null){
calculateDistanceAndNavigate(lat,lng,lastLocation.latitude,lastLocation.longitude,radio)
}else{
startLocationUpdates()
locationCallback = object : LocationCallback() {
override fun onLocationResult(locationResult: LocationResult?) {
locationResult ?: return
for (location in locationResult.locations) {
calculateDistanceAndNavigate(lat,lng,location.latitude,location.longitude,radio)
}
}
}
}
}
private fun startLocationUpdates() {
fusedLocationClient.requestLocationUpdates(
locationRequest,
locationCallback,
Looper.getMainLooper()
)
}
對我來說,這是獲取位置的最有效方法,首先我不只使用 GPS,而是節省電池並在需要時使用 NETWORK 或 WIFI,然后我請求 lastKnownLocation 如果它被保存(可能由另一個應用程序,例如:谷歌地圖),然后如果失敗,我就開始請求位置更新(這可能需要一點時間)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.