簡體   English   中英

在Android中使用延遲方法的正確方法

[英]Correct way to use delaying method in android

我正在嘗試創建一個adndroid應用程序,該應用程序將顯示我啟動該應用程序時的距離。 我正在使用位置管理器,這是我的主意:

  1. 檢查坐標。
  2. (延遲2秒)
  3. Chceck坐標2
  4. 如果坐標2!=坐標,則計算它們之間的距離並將其加到兩倍距離。
  5. 重復

    public void onLocationChanged(最終位置){

      sz = location.getLatitude(); dl = location.getLongitude(); String dls = String.valueOf(dl); String szs = String.valueOf(sz); aktualna_dlg.setText(dls); aktualna_szg.setText(szs); lat1 = location.getLatitude(); lon1 = location.getLongitude(); int secs = 2; // Delay in seconds Utils.delay(secs, new Utils.DelayCallback() { @Override public void afterDelay() { lat2 = location.getLatitude(); lon2 = location.getLongitude(); } }); if (lat1!=lat2 || lon1!=lon2){ distance += DistanceCalculator.distance(lat1,lon1,lat2,lon2, "K"); } if(distance<1000){ String distance_s = String.valueOf(distance*1000); distance_tv.setText(distance_s + " m"); } else if(distance>=1000){ String distance_s = String.valueOf(distance/1000); distance_tv.setText(distance_s + " km"); } } 

    但是,當我編譯該應用程序並捕獲GPS時,我的距離約為6公里。 我究竟做錯了什么?

我不確定utils.delay會做什么,因為它不是框架的一部分。 但是,假設它可以正常工作-它會延遲發生。 這意味着lat2和lon2在被調用之前不會更新。 所有使用這些變量的代碼都必須在afterDelay中發生,直到那時它們才有效。

消除延遲,只需將onLocationChanged的參數與上次調用時的參數進行比較即可。 至於為什么您要記錄很長的路程...

使用高通濾波器

您希望在2秒內移動多遠? 除非您在飛機上,否則可能會低於GPS接收機的精度。 實際上,您的大多數“運動”只是隨機噪聲。

在我的一個應用程序中,我將起始GPS位置保存為參考點。 每次調用onLocationChanged ,我都會計算當前位置和參考點之間的距離。 如果該距離大於某個高通值,則將該距離加到運行總計中,並將新位置設置為參考點。 我使用100米作為高通值,因為我在高層建築物周圍看到了一些精度達到100米或更差的設備。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM