我一直試圖通過GPS的幫助獲得速度。當我的電話掉線時,我想獲得Gps數據(緯度 - 經度 - 速度)。從Android上獲取GPS速度計算距離和時間
當電話跌倒時,GPS數據被獲取併發送到我的服務器。爲了這個目的,我使用了線程。每個線程獲取gps數據併發送給服務器。
我的問題是速度值。我有兩個地點和時間 (速度=距離/時間)
線程使之間的高速計算距離:
@Override
public void run() {
Looper.prepare();
float distance = 0.0f;
float[] results = new float[1];
Long longValue = new Long(11);
double firstLatitude;
double firstLongitude;
long firstTime;
float speedOfDevice = 0.0f;
//for sendin gps datas to web server
ReportLocation reportObj = new ReportLocation(this);
locManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListener);
//latitude, longitude and timeOffix is set in location listener
firstLatitude = latitude;
firstLongitude = longitude;
firstTime = timeOfFix;
// Waiting 1.5 second
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
e.printStackTrace();
Toast.makeText(this, "Sleep exception", Toast.LENGTH_LONG).show();
}
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListener);
if(timeOfFix != firstTime) {
Location.distanceBetween(firstLatitude, firstLongitude, latitude, longitude, results);
distance = results[0];
longValue = new Long(timeOfFix - firstTime);
speedOfDevice = 3600 * distance/(longValue.floatValue());
}
try {
reportObj.send(Double.toString(firstLatitude), Double.toString(firstLongitude), Float.toString(speedOfDevice));
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
Toast.makeText(this, "Client protokol exception ", Toast.LENGTH_LONG).show();
} catch (IOException e) {
// TODO Auto-generated catch block
Toast.makeText(this, "IO exception "+e.getMessage(), Toast.LENGTH_LONG).show();
}
handler.sendEmptyMessage(0);
Looper.loop();
}
}
class MyLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location location) {
if (location != null) {
locManager.removeUpdates(locListener);
latitude = location.getLatitude();
longitude = location.getLongitude();
timeOfFix = location.getTime();
}
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
}
我想我的程序在車上在運動中。但我無法獲得正確的速度數據。例如7.31365,8.29663等。它們應該是50-60或70km/h ..
您的想法是什麼?
位置返回正確嗎? – znat 2012-01-10 18:13:13
是的,地點返回正確。但首先是經緯度或拳頭的經度和緯度值有時可能相同。我不明白.. – iremce 2012-01-10 18:16:06
我想知道你的實施是否正確。監聽器應該返回調用服務/線程/活動與回調(檢查這篇文章:http://stackoverflow.com/questions/3145089/what-is-the-simplest-and-most-robust-way-對獲得-的用戶,當前定位功能於一個)。另外,我認爲它會在手機進入睡眠模式時停止工作 – znat 2012-01-10 18:40:06