Я пытался набрать скорость с помощью GPS. Я хотел бы получить данные 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 или 70 км / ч.
Что ты думаешь?