[英]Correct way to use delaying method in android
我正在嘗試創建一個adndroid應用程序,該應用程序將顯示我啟動該應用程序時的距離。 我正在使用位置管理器,這是我的主意:
重復
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.