0
我在使用傳統的onLocationChanged
調用獲取位置更新的正確時間時遇到了一些問題。我已將GPS
參數設置爲requestLocationUpdates
,並且我的getLatitude();
getLongitude();
和getAltitude();
值在適當的時間間隔內會更新,但我的時間值似乎滯後一個讀數。我曾嘗試撥打getTime()
和System.currentTimeMillis();
撥打電話時撥打電話getLatitude();
getLongitude();
和getAltitude();
,但兩種方式的延遲相同。由於我使用時間和地點來進行計算,所以這個滯後是一個問題。
我想到實現一個timer,然後實施一個位置呼叫,但真的不知道如何拉斷。在位置更新期間獲取時間值的問題
@覆蓋 公共無效onLocationChanged(位置LOC) { /*獲取當前速度*/ loc.getSpeed();
/* Assign speed value to double variable in meter/sec, convert to miles/hr, and convert to string*/
float currentSpeedInMeterPerSecond = loc.getSpeed();
float currentSpeed = currentSpeedInMeterPerSecond*2.237f;
currentSpeedMPHInt = Math.round(currentSpeed);
currentSpeedString = Integer.toString(currentSpeedMPHInt);
/* Print out current speed */
TextView currentSpeedText = (TextView)findViewById(R.id.speed);
currentSpeedText.setText(currentSpeedString);
/* Get headwind, frontal area, drag coefficent (Cd), rolling coeffiecent (Cr) */
mySharedPreferences = getSharedPreferences(MY_PREFS, prefMode);
headWindString = mySharedPreferences.getString("keyheadWindString", "0");
headWind = new Float(headWindString);
frontalAreaString = mySharedPreferences.getString("keyfrontalAreaString", "6.6");
frontalArea = new Float(frontalAreaString);
dragCoefficentString = mySharedPreferences.getString("keydragCoefficentString", "1.15");
dragCoefficent = new Float(dragCoefficentString);
riderWeightString = mySharedPreferences.getString("keyriderWeightString", "205");
riderWeight = new Float(riderWeightString);
bikeWeightString = mySharedPreferences.getString("keybikeWeightString", "30");
bikeWeight = new Float(bikeWeightString);
rollingCoefficentString = mySharedPreferences.getString("keyrollingCoefficentString", "0.0075");
rollingCoefficent = new Float(rollingCoefficentString);
/* get current time and location and speed and altitude*/
System.currentTimeMillis();
loc.getLatitude();
loc.getLongitude();
loc.getAltitude();
/* Set start time and location */
if (i < j) {
i = i + 1;
time1 = System.currentTimeMillis();
altitudeStart = loc.getAltitude();
altitudeA = loc.getAltitude();
latA = loc.getLatitude();
logA = loc.getLongitude();
Location.distanceBetween(latA,logA, latB,logB, distance);
}else{
/* Get new location and time*/
timeNew = System.currentTimeMillis();
latB = loc.getLatitude();
logB = loc.getLongitude();
altitudeB = loc.getAltitude();
/* Get distance between point A and point B*/
Location.distanceBetween(latA,logA, latB,logB, distance);
distanceTraveledMeters = distance[0]; /* distance between A and B in meters*/
distanceTraveledMiles = distanceTraveledMeters * 0.0006213712f;
if(distanceTraveledMiles<0.02f){
distanceTraveledMiles = 0f;
}
/* Get and find time, total distance, average power , average speed, total Kcal, total elevation diff*/
timeinterval = timeNew - time1;
timeintervalSec = timeinterval/1000f;
tripTimeTotalmin = tripTimeTotalmin + (timeintervalSec/60f);
totalDistance = totalDistance + distanceTraveledMiles;
averageSpeed = totalDistance/(tripTimeTotalmin/60f);
elevChange = (((altitudeB + altitudeA)/2) - altitudeStart)*3.2808d;
elevChangeFloat = (float)elevChange;
powerElevationChangeWattsAve = ((((riderWeight+bikeWeight)*32.174f)*elevChangeFloat)/tripTimeTotalmin)*0.00070234f;
intervalSpeedMPH = distanceTraveledMiles/(timeintervalSec/3600f);
powerAirResistanceWattsAve = (0.5f*dragCoefficent*0.075f*((averageSpeed+headWind)*(averageSpeed+headWind))*frontalArea*(averageSpeed+headWind))*0.13295f;
powerRollingResistanceWattsAve = rollingCoefficent*(riderWeight+bikeWeight)*32.174f*averageSpeed*0.062f;
powerTotalWattsAve = powerElevationChangeWattsAve+powerAirResistanceWattsAve+powerRollingResistanceWattsAve;
totalKcalBurned = (powerTotalWattsAve*tripTimeTotalmin*0.01433f)/0.24f;
mechBtuUsed = powerTotalWattsAve*tripTimeTotalmin*0.056869f;
/*Round off values*/
totalDistance = totalDistance*10f;
totalDistance = Math.round(totalDistance);
totalDistance = totalDistance/10f;
tripTimeMin = Math.round(tripTimeTotalmin);
timeintervalSec = Math.round(timeintervalSec);
averageSpeedInt = Math.round(averageSpeed);
powerTotalWattsInt = Math.round(powerTotalWattsAve);
totalKcalBurnedInt = Math.round(totalKcalBurned);
intervalSpeedMPHInt = Math.round(intervalSpeedMPH);
mechBtuUsedInt = Math.round(mechBtuUsed);
elevChangeInt = Math.round(elevChangeFloat);
/*convert to stings*/
totalDistanceString = Float.toString(totalDistance);
tripTimeTotalminString = Integer.toString(tripTimeMin);
averageSpeedString = Integer.toString(averageSpeedInt);
powerTotalWattsString = Integer.toString(powerTotalWattsInt);
totalKcalBurnedString = Integer.toString(totalKcalBurnedInt);
mechBtuUsedString = Integer.toString(mechBtuUsedInt);
elevChangeString = Integer.toString(elevChangeInt);
/* Print out */
TextView totalDistanceText = (TextView)findViewById(R.id.distance);
totalDistanceText.setText(totalDistanceString);
TextView tripTimeTotalminText = (TextView)findViewById(R.id.triptime);
tripTimeTotalminText.setText(tripTimeTotalminString);
TextView averageSpeedText = (TextView)findViewById(R.id.avespeed);
averageSpeedText.setText(averageSpeedString);
TextView powerTotalWattsText = (TextView)findViewById(R.id.watts);
powerTotalWattsText.setText(powerTotalWattsString);
TextView totalKcalBurnedText = (TextView)findViewById(R.id.burnedkcal);
totalKcalBurnedText.setText(totalKcalBurnedString);
TextView mechBtuUsedText = (TextView)findViewById(R.id.mechbtu);
mechBtuUsedText.setText(mechBtuUsedString);
TextView elevChangeText = (TextView)findViewById(R.id.elevchange);
elevChangeText.setText(elevChangeString);
/*reset start time and location and interval elevation */
time1 = timeNew;
latA = latB;
logA = logB;
altitudeA = altitudeB;
/* check iterations*/
k = k +1;
kString = Integer.toString(k);
TextView kStringText = (TextView)findViewById(R.id.k);
kStringText.setText(kString);
}
}
你是如何保存它知道它的一個滯後背後?通過落後你的意思,你會在t1時間收到更新,然後在t2收到更新,但是當你打印時,它仍然有t1? – 2012-07-23 19:53:50
我把它寫在我的屏幕上。距離改變,但時間不變,我可以從這些值中看出,OLD時間不是新時間用於計算。顯然,應用程序運行的時間越長,錯誤越小,但它通常仍然過大。 – 2012-07-23 20:23:16
計算完成在哪裏?它在'onLocationChanged'函數中嗎?我認爲你將不得不張貼一些代碼。我感覺你存儲/檢索時間戳的方式導致了問題。你能發佈至少你的'onLocationChanged'代碼和你的計算代碼嗎? – 2012-07-23 22:24:51