前不久学习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); }