初入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
解决方案 »
- SAX解析,对一个tag为啥执行三次 character()方法?
- 【求助】类似于QQ、微信之类的软件安装后第一次打开,功能介绍的图片切换效果该怎么做
- 安卓模拟器文件管理器出问题了
- 关于google Map的问题求解!!!
- [求助]如何在view上添加滚动条
- android项目大全,总你所需的
- SurfaceView 内画一个圆形,如何添加点击事件呢?
- 坑爹的Android Studio JDK1.7配置
- ANDROID如何设置移动专网APN
- 滴滴打车外挂程序如何写
- 环境搭建时,SDK Manager.exe 出不来各个版本的安装,为什么?
- 在Android客户端去调用myeclipse发布的webservice
结论:个人认为GPS信号对于原地不动或者短距离的测量是不够理想的,但长距离的测试应该误差还是可以接受的。备注:有想过对同一位置的不同时刻接收到的经纬度进行处理从而提高准确度,但暂没想到有什么好方法。