初入android编程,因为个人热爱跑步,打算编写一个计算跑步距离的GPS小程序,但遇到以下问题,请高人指点:
1,程序在手机启动后,就算原定不动,距离也会增加(会显示几十米),有什么办法提高准确性呢2,部分代码之onreate初始化:
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);          textview1=(TextView)findViewById(R.id.textView1);
          textview2=(TextView)findViewById(R.id.textView2);
          textview3=(TextView)findViewById(R.id.textView3);
        //要使用地理定位,首先需要取得LocationManager的实例,在Android中,获取LocationManager的唯一方法就是通过getSystemService()方法的调用。
        lm=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
        
        //判断GPS是否正常启动
        if(!lm.isProviderEnabled(LocationManager.GPS_PROVIDER))
        {
         //Toast 在应用程序上浮动显示信息给用户,它永远不会获得焦点,不影响用户的输入等操作
            //Toast.makeText(this, "请开启GPS导航...", Toast.LENGTH_SHORT).show();
         //使用弹出提示对话框的形式较好     
         AlertDialog.Builder dialog= new AlertDialog.Builder(this);
         dialog.setTitle("提示");
         dialog.setMessage("GPS还没打开,是否开启?");
         dialog.setPositiveButton("是", dialoglistener);       
         dialog.setNegativeButton("否", dialoglistener);
         dialog.show();
        }
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 10, locationListener);  //设置10米变化就更新(之前设置过1秒+10米,效果不好,距离老是跳动)     
    }3,累计跑步距离,变量值是GPSDistance为全局double变量初始化为0:
    private LocationListener locationListener=new LocationListener() {        
        public void onLocationChanged(Location location) {
         weidu2=location.getLatitude();
         jindu2=location.getLongitude();
         if(weidu1==0&&jindu1==0)
         {         
          weidu1=weidu2;
   jindu1=jindu2;
         }
         else {
         GPSDistance+=GetDistance(weidu1, jindu1, weidu2, jindu2);
         String text="距离(米):";
          textview1.setText(text);
          textview1.append(String.valueOf(GPSDistance));         
weidu1=weidu2;
jindu1=jindu2;
}
            updateView(location);//这个函数只是把数值显示到textview里面,就不贴代码了        
            reminder("onlocationchanged of locationlistener");
        }4,计算两点不同经纬度的方法getdistance函数:
public double GetDistance(double lat1, double lng1, double lat2, double lng2)
{
float[] results=new float[1];  
Location.distanceBetween(lat1, lng1, lat2, lng2, results);  //系统自带函数
return results[0];  //返回距离 }android GPS函数问题android

解决方案 »

  1.   

    gps本身就会漂移,运动起来会好一点。所以我觉得可以根据速度来确定是否开始算。
      

  2.   

    昨晚自己拿自己编写的程序和市面上现有的第三方软件如咕咚软件和runtastic软件去对比,发现现象几乎一样的,就算你站定不动,但由于所处的位置环境(不够空旷)导致GPS信号接收有很多干扰,所以同一位置不同时刻接收到的经纬度不同的可能性还是很大的,但是如果运动起来(超过1公里左右)GPS的长度计算还是挺准确的,自编程序与第三方软件差别不大。
    结论:个人认为GPS信号对于原地不动或者短距离的测量是不够理想的,但长距离的测试应该误差还是可以接受的。备注:有想过对同一位置的不同时刻接收到的经纬度进行处理从而提高准确度,但暂没想到有什么好方法。