我有一个应用程序可以计算行驶的公里数。但是当我在前1或2公里开车的时候。一切都很好,然后我的应用程序变慢。例如,当我走了2公里。我的应用程序是1.93或当我旅行70公里。我的应用程序是48公里。
我还有一个小问题。 当我第一次启动应用程序时,我获得了很大的价值(例如5536km。),当我重新启动程序时,我得到正常值0.0km。这就是我第一次启动GPS时如果我关闭GPS并且之后打开我会再次遇到同样的问题。
抱歉我的英语不好。
提前致谢。
public class Gps extends Activity {
TextView display;
double km;
double currentLon=0 ;
double currentLat=0 ;
double lastLon = 0;
double lastLat = 0;
double distance;
double distanceMeters;
double distanceKm;
double distanceKm1;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gps);
display = (TextView) findViewById(R.id.info);
LocationManager lm =(LocationManager) getSystemService(LOCATION_SERVICE);
lm.requestLocationUpdates(lm.GPS_PROVIDER, 0,0, Loclist);
Location loc = lm.getLastKnownLocation(lm.GPS_PROVIDER);
display.setText("GPS not found");
if(loc==null){
display.setText("GPS not found");
}
else{
//Get the last latitude and longitude
lastLon=loc.getLongitude();
lastLat=loc.getLatitude();
}
}
LocationListener Loclist = new LocationListener(){
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
//start location manager
LocationManager lm =(LocationManager) getSystemService(LOCATION_SERVICE);
//Get last location
location = lm.getLastKnownLocation(lm.GPS_PROVIDER);
//Request new location
lm.requestLocationUpdates(lm.GPS_PROVIDER, 0,0, Loclist);
//get the current lat and long
currentLat = location.getLatitude();
currentLon = location.getLongitude();
Location locationA = new Location("point A");
locationA.setLatitude(lastLat);
locationA.setLongitude(lastLon);
Location locationB = new Location("point B");
locationB.setLatitude(currentLat);
locationB.setLongitude(currentLon);
distanceMeters = locationA.distanceTo(locationB);
distanceKm = distanceMeters / 1000f;
display.setText(String.format("traveled km.\n%.2f km.",distanceKm));
}
@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
}
};
}
答案 0 :(得分:1)
我可以回答你的第二个问题:
当我第一次启动应用程序时,我获得了很大的价值(例如 5536公里。)
这是从(0,0)(aequator)到你当前位置的距离 似乎lastLon和lastLat的初始值为0。 所以你必须避免lastLon和lastLat无效。 明确检查是否未被初始化。