2016-03-06 161 views
4

介紹Fused Location Provider:有沒有方法檢查位置更新是否失敗?

在我的應用我想要得到的,其中用戶目前是一次性的準確位置。當我使用FusedLocationProviderApi.getLastLocation有時這將是空的或過時的位置,因爲我發現這只是獲取緩存的位置,並不要求新的位置更新。

解決方案只請求一次位置更新,如下所示。

LocationRequest locationRequest = LocationRequest.create() 
       .setNumUpdates(1) 
       .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY) 
       .setInterval(0); 

     LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,locationRequest,this) 

現在我得到一個更準確的位置所有的時間。

我的問題

我怎樣才能確定一個位置更新失敗了嗎?因爲我只申請了1

當獲得位置更新這個調用回調函數

@Override 
public void onLocationChanged(Location location) { 

} 

然而,這不會被調用,如果位置更新失敗。

我已經試過

我看到有一個ResultCallback。但是,即使一次性位置更新失敗,onSuccess也總是被調用。

LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,locationRequest,this).setResultCallback(new ResultCallbacks<Status>() { 
      @Override 
      public void onSuccess(@NonNull Status status) { 
       DebugUtils.log("requestLocationUpdates ResultCallback onSuccess + " + status.toString(),true,true); 
      } 

      @Override 
      public void onFailure(@NonNull Status status) { 
       DebugUtils.log("requestLocationUpdates ResultCallback onFailure + " + status.toString(),true,true); 
      } 
     }); 

其他

使用com.google.android.gms:play-services-location:8.4.0

感謝您的閱讀,請幫助我。

+0

嘗試檢查'onSuccess()'方法的'status'參數? –

+0

是的,當它應該失敗時,toString方法報告「Status {statusCode = SUCCESS,resolution = null}」 –

回答

12

在挖掘了API多一點並做了一些測試之後,我發現了一個解決方案來解決我的問題,這似乎正在起作用。

LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, locationRequest, new LocationCallback() { 
      @Override 
      public void onLocationResult(LocationResult result) { 
       DebugUtils.log("onLocationResult"); 
      } 

      @Override 
      public void onLocationAvailability(LocationAvailability locationAvailability) { 
       DebugUtils.log("onLocationAvailability: isLocationAvailable = " + locationAvailability.isLocationAvailable()); 
      } 
     }, null); 

而不是使用LocationListener。我使用LocationCallback

onLocationResult僅根據LocationRequest提供最新的位置結果。如果無法提供位置,則不會調用該位置,並且在我的測試期間,位置不可用且GPS在室內使用等情況時不會被調用。請致電result.getLastLocation()以獲取實際位置對象。

onLocationAvailablity總是被調用。 locationAvailability.isLocationAvailable()如果設備位置已知並且在活動LocationRequests請求的提示內合理地更新,則返回true。如果無法確定位置可能來自許多原因,包括禁用位置設置或無法在設備環境中檢索傳感器數據,則返回False。

我已經測試過沒有位置服務,只能在室內使用GPS。在每種情況下,我刪除了所有現有的位置歷史記錄(以防止緩存的位置)。一個準確的最新位置總是返回。

其他人能證明這一點嗎?

注意:requestLocationUpdates調用的最後一個參數是活套。傳入null意味着它將使用調用線程的消息隊列。

+0

你知道這件事我花了整整兩天。我會盡可能地分享這個答案。它應該被標記爲接受答案。 – Subho

+0

@Ersen Osman謝謝你兄弟你救了我的命.....再次感謝你 –

相關問題