2013-09-25 33 views
1

在Android中,我使用報警管理器通過GPS每隔30秒獲取位置。我想要使​​用地址來檢測設備是否正在旅行或出現在相同的位置。 如果設備在相同位置的GPS獲取一些準確的數據,有些時候在距地圖準確位置顯示20或30米時獲得近似數據。如何查找設備是否位於同一位置或在Android中移動?

因此,它正在尋找設備旅行的問題。

如何查找設備不是旅行?

+0

location.getSpeed不能做你想要的嗎?或者你沒有閱讀文檔? – njzk2

回答

0

每隔30秒,當您獲得新位置時,您可以將其與之前的位置進行比較,以查看位置是否有任何差異並確定設備是否正在旅行。

+0

我的確喜歡你說的,但GPS有時會在顯示爲旅行的時候遠離正確的位置。 – Dhana

1

您可以在onLocationChanged()方法中編寫代碼。在設備改變其位置時,您每次都會獲得新的緯度經度。僅當位置已更改時才調用OnLocationChange()方法。但是如果你想要一些具體的距離明智的計算,那麼你必須計算舊的lat和long之間的距離。你可以用lat-long找到距離。

+0

我沒有使用onLocationChanged()方法。我使用Pending Intent獲取位置。 – Dhana

+0

使用LocationManager類可以爲您提供準確的結果以及您需要的任何計算結果。 –

6

如果您有權訪問Play Services,請查看Recognizing the User's Current Activity

否則,在a locationListener中,您可以執行如下操作: 由於即使位於相同位置,接收到的GPS信號也會發生變化,因此您不能僅將新位置與舊位置進行比較。我會用類似下面的代碼

  double venueLat =latitude // Last known lat 
      double venueLng = longitude // Last known lng 

      double latDistance = Math.toRadians(userLat - venueLat); 
      double lngDistance = Math.toRadians(userLng - venueLng); 
      double a = (Math.sin(latDistance/2) * Math.sin(latDistance/2)) + 
          (Math.cos(Math.toRadians(userLat))) * 
          (Math.cos(Math.toRadians(venueLat))) * 
          (Math.sin(lngDistance/2)) * 
          (Math.sin(lngDistance/2)); 

      double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); 

      double dist = 6371 * c;    
      if (dist<0.01){ (in km, you can use 0.1 for metres etc.) 
       /* If it's within 10m, we assume we're not moving */ 
      } 
+0

感謝您提供有關Play服務的有用信息 – Dhana

1

你可以使用提出了播放服務的新動作識別功能,並檢查用戶「仍然」。請閱讀here,herehere瞭解更多信息,和/或查看this videothis one。我從來沒有測試過它,但它看起來非常有前途。另外,如果你堅持使用gps,你可以定義一個用戶被認爲停留在同一位置的範圍,然後檢查每個用戶沒有超出這個範圍的樣本。

設置一個範圍不要太小也不要太大,因爲總會有誤差。

+0

謝謝。我從你發送的鏈接中獲得有用的信息。 – Dhana

+0

請注意,活動識別功能僅適用於安裝了Play商店的Android設備(這是大多數情況下的情況) –

+0

識別功能是否會將設備位置發送至Google Play服務器? – Dhana

相關問題