初入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,程序在手机启动后,就算原定不动,距离也会增加(会显示几十米),有什么办法提高准确性呢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
解决方案 »
- android中gridView 可以添加 widget吗
- 怎么用fragment实现tabhost的功能
- 求教toast显示问题~~
- 如何用java产生一个周期的正弦信号数据?
- about FLAG_ACTIVITY_NEW_TASK
- 能不能设置edittext 中部分文字的颜色
- 放大的动画如何设置参数?
- 最近在做锁屏应用,可以Home键不会屏蔽啊
- 使用javamail发送带附件邮件问题
- eclipse android sdk 无法更新解决办法
- 环境搭建时,SDK Manager.exe 出不来各个版本的安装,为什么?
- 在Android客户端去调用myeclipse发布的webservice
结论:个人认为GPS信号对于原地不动或者短距离的测量是不够理想的,但长距离的测试应该误差还是可以接受的。备注:有想过对同一位置的不同时刻接收到的经纬度进行处理从而提高准确度,但暂没想到有什么好方法。