智能设备中,定位信息是基本的功能,最近的测试中发现GPS信息大海拔高度为0的情况,下面一起总结下项目中定位信息的几种获取形式。
场景一:隔几秒钟把定位数据插入数据库中。
locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);// 读取GPS状态
locationManager.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER);//判断定位服务是否可用(打开了GPS权限)
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, locationListener);
//requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener)
Register for location updates using the named provider, and a pending intent.
更新的时间周期,和距离变化周期
private final LocationListener locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
// 当座标改变时触发此函数,如果Provider传进相同的座标,它就不会被触发
updateToNewLocation(location);
}
@Override
public void onProviderDisabled(String provider) {
// Provider被disable时触发此函数,比如GPS被关闭
Log.v("gpsinfo", "onProviderDisabled");
updateToNewLocation(null);
}
@Override
public void onProviderEnabled(String provider) {
Log.v("gpsinfo", "onProviderEnabled" + provider);
// Provider被enable时触发此函数,比如GPS被打开
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
Log.v("gpsinfo", "onStatusChanged");
// Provider的转态在可用、暂时不可用和无服务三个状态直接切换时触发此函数
}
};
在这个接口回调里就能获取到定位信息了Location相关的
搜星数可以通过另外的接口
locationManager.addGpsStatusListener(gpsStatusListener); // 注册状态信息回调
private final GpsStatus.Listener gpsStatusListener = new GpsStatus.Listener() {
@Override
public void onGpsStatusChanged(int event) { // GPS状态变化时的回调,如卫星数
GpsStatus status = locationManager.getGpsStatus(null); // 取当前状态
updateGpsStatus(event, status);
}
};
private void updateGpsStatus(int event, GpsStatus status) {
if (status == null) {
setGpsImagStatus(1);
} else if (event == GpsStatus.GPS_EVENT_SATELLITE_STATUS) {
int maxSatellites = status.getMaxSatellites();
Iterator<GpsSatellite> it = status.getSatellites().iterator();
numSatelliteList.clear();
int count = 0;
while (it.hasNext() && count <= maxSatellites) {
GpsSatellite s = it.next();
numSatelliteList.add(s);
count++;
}
setGpsImagStatus(getGpsImgStatus(numSatelliteList.size()));
}
}
、
以上是通过Java类获取到的信息。实际上还有原始的GPS数据,
现在android studio不建议使用这些老旧的api了
locationManager.addNmeaListener(nmeaListener);
static NmeaListener nmeaListener = new NmeaListener() {
private long timeB = 0;
@Override
public void onNmeaReceived(long timestamp, String nmea) {
gpsAnalysis.processNmeaData(nmea);
if (timestamp - timeB > 500) {
} else {
getGpsAnalysis();
}
timeB = timestamp;
}
};
GPGSV:可见卫星信息
GPGLL:地理定位信息
GPRMC:推荐最小定位信息
GPVTG:地面速度信息
GPGGA:GPS定位信息
GPGSA:当前卫星信息