目前我正在开发一个应用程序,我想计算车辆行驶的距离。我的要求是在驾驶汽车时,我的Android设备应该计算我旅行的总距离并将此信息发送到服务器。为此,我使用了Android的位置管理器api,设置了条件并使用了getBestProvider。这样我们就可以使用GPS或网络来获得经度和纬度。以下是此代码段:
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setPowerRequirement(Criteria.POWER_HIGH);
provider = locationManager.getBestProvider(criteria, false);
locationManager.requestLocationUpdates(provider,30000,5, this);
onLocationChanged()回调方法每次都提供纬度和经度。我们总是存储先前的坐标,当我们得到新坐标时,我们使用distanceBetween()api找到两者之间的距离。以下是此代码段:
public void onLocationChanged(Location location) {
findLatLongDistance(location);
}
private void findLatLongDistance(Location location) {
// TODO Auto-generated method stub
try{
Date date = new Date();
TimeStamp2 = sdf.format(date);
getSavedLatLong();//get lat and long from preference
Location locationB = new Location("point B");
locationB.setLatitude(location.getLatitude());
locationB.setLongitude(location.getLongitude());
Location locationA = new Location("point A");
locationA.setLatitude(prelat_val); //lat from pref locationA.setLongitude(prelong_val); //long from pref
if(prelat_val>0.0 && prelong_val>0.0){
Toast.makeText(LocationService.this,"Location Odometer Sum "+odometer_sum, Toast.LENGTH_LONG).show();
float distance2 = getDistance(prelat_val,prelong_val,location.getLatitude(),location.getLongitude());
odometer_sum = odometer_sum + (distance2/1000);
Toast.makeText(LocationService.this,"Lat "+prelat_val+"Long "+prelong_val+"Sum "+odometer_sum, Toast.LENGTH_LONG).show();
}
saveData(lat,lng,odometer_sum);
}catch(Exception e){
e.printStackTrace();
}
}
public float getDistance(double d, double e, double f, double g) {
float [] dist = new float[2];
Location.distanceBetween(d,e,f, g, dist);
return dist[0] ;
}
这是我们在这里面临的问题清单:
我真的花了这么多时间尝试各种选择。但我觉得我在这里遗漏了一些东西。请帮帮我。提前谢谢..
谢谢,
答案 0 :(得分:0)
requestLocationUpdates()中的minTime值为30秒。对于试图计算准确距离的应用来说,这太长了。我使用过locationManager.requestLocationUpdates(provider, 0, 5, locationListener);
在我的代码中很长时间,我得到准确的更新。虽然这会非常快地耗尽电池。因此,您必须尝试不同的值才能在准确度和电池寿命之间取得平衡,并查看适合您应用的内容