Android平台上GPS信号的获取和展示

前不久学习GPS,故在Android系统(HTC G7手机)上做了一个GPS信号解析工具,现总结如下,欢迎各位指正

功能:

1. 获取了location的GPS信息,包括经纬度,速度,方向等

2. 卫星信息,包括卫星数,仰角,方位角,信噪比等。

并画了一个地球的形状的图显示卫星信息,由于没有时间,还没有去获取磁场传感器信息

先来了解下GPS的基本概念:

GPS是Global positioning system 的缩写,即全球定位系统,目的是在全球范围内对地面和空中目标进行准确定位和检测

GPS系统一般由地面控制站,导航卫星和接收机三大部分组成

而手机带GPS功能,它首先必须有GPS模块,才能接收GPS信号,GPS模块通过异步串行通信方式与微处理器控制模块进行通信。GPS模块会每隔1秒就向串口发送GPS数据

在android平台上,从窗口获取GPS数据已经被系统做了,为我们提供接口,只需去调用这些接口,就可以获取GPS数据,而不用去读串口;如果在WINCE平台上,要获取GPS数据就得去读取串口,而且WINCE中的串口是独占设备,如果在在程序中打开了串口进行数据的监控,那么打开导航软件之前必须把串口关闭,当然也可以使用虚拟串口的方式,让多个进程能同时获取数据,以下我只要提供了一些主要的模块。

主要用到的类:

LocationManager;

Location;

GpsStatus;

Criteria;

主要的变量定义:

private Location location;
// 定位管理类
private LocationManager locationManager;  
//监听卫星变量
private GpsStatus gpsStatus;
Iterable<GpsSatellite> allSatellites;
protected Iterator<GpsSatellite> Iteratorsate;

private Criteria criteria;


1.打开GPS服务,LocationManger是获取位置管理服务,GPS信息和卫星信息都需要它:

LocationManager locationManager;   private void openGPSSettings()       {                  // 获取位置管理服务              locationManager = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);                   if (locationManager.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER))            {                        Toast.makeText(this, "GPS模块正常", Toast.LENGTH_SHORT).show();                   return;                 }               status = false;           Toast.makeText(this, "请开启GPS!", Toast.LENGTH_SHORT).show();                Intent intent = new Intent(Settings.ACTION_SECURITY_SETTINGS);                startActivityForResult(intent,0); //此为设置完成后返回到获取界面       }  

2.填充Criteria位置数据标准类,并调用位置监听函数和卫星监听函数,将所要操作的设置在Criteria数据标准类中设置,为true时可以使用

private void getLocation()           {               // 查找到服务信息    位置数据标准类           Criteria criteria = new Criteria();               //查询精度:高           criteria.setAccuracy(Criteria.ACCURACY_FINE);            // 是否查询海拔:是           criteria.setAltitudeRequired(true);           //是否查询方位角:是           criteria.setBearingRequired(true);           //是否允许付费           criteria.setCostAllowed(true);               // 电量要求:低           criteria.setPowerRequirement(Criteria.POWER_LOW);           //是否查询速度:是           criteria.setSpeedRequired(true);                      provider = locationManager.getBestProvider(criteria, true);                      // 获取GPS信息   获取位置提供者provider中的位置信息           location = locationManager.getLastKnownLocation(provider);            // 通过GPS获取位置                updateToNewLocation(location);              // 设置监听器,自动更新的最小时间为间隔N秒(1秒为1*1000,这样写主要为了方便)或最小位移变化超过N米               //实时获取位置提供者provider中的数据,一旦发生位置变化 立即通知应用程序locationListener           locationManager.requestLocationUpdates(provider, 1000, 0,locationListener);           //监听卫星,statusListener为响应函数           locationManager.addGpsStatusListener(statusListener);           }  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwgzzz.html