天天看点

Android GPS数据获取记录

车机平台Android4.4.3

车机GPS实测数据日志如图:

Android GPS数据获取记录
/**
车载GPS实测数据日志
I/AutoTestLog-->NaviManager(  522): longitude:114.01005166666667 // 经度
I/AutoTestLog-->NaviManager(  522): latitude:22.644654999999997 // 纬度
I/AutoTestLog-->NaviManager(  522): getTime:1577354343000 // 时间
I/AutoTestLog-->NaviManager(  522): getAltitude:209.1 // 高度
I/AutoTestLog-->NaviManager(  522): GPS_EVENT_SATELLITE_STATUS
I/AutoTestLog-->NaviManager(  522): count:11----f:51.0 // 分别为卫星搜星颗数 与 信号强度
**/
           
<!-- GPS定位权限 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>     
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
           
// 获取车机GPS数据核心代码片断


private LocationManager lm;
	private int startNumber;
	private double longitude;
	private double latitude;
	private float strength;

public float getStrength() {
		return strength;
	}

	public void setStrength(float strength) {
		this.strength = strength;
	}

	public void setStartNumber(int startNumber) {
		this.startNumber = startNumber;
	}

	public int getStartNumber() {
		return startNumber;
	}

	public double getLongitude() {
		return longitude;
	}

	public double getLatitude() {
		return latitude ;
	}


void init(){
	lm = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
	// 获取位置信息
	// 如果不设置查询要求,getLastKnownLocation方法传人的参数为LocationManager.GPS_PROVIDER
	Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
	updateLocation(location);
	// 监听状态
	lm.addGpsStatusListener(listener);
	// 绑定监听,有4个参数
	// 参数1,设备:有GPS_PROVIDER和NETWORK_PROVIDER两种
	// 参数2,位置信息更新周期,单位毫秒
	// 参数3,位置变化最小距离:当位置距离变化超过此值时,将更新位置信息
	// 参数4,监听
	// 备注:参数2和3,如果参数3不为0,则以参数3为准;参数3为0,则通过时间来定时更新;两者为0,则随时刷新
	// 1秒更新一次,或最小位移变化超过1米更新一次;
	// 注意:此处更新准确度非常低,推荐在service里面启动一个Thread,在run中sleep(10000);然后执行handler.sendMessage(),更新位置
	lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, locationListener);
}

private void updateLocation(Location location) {
	if (location == null) {
		return;
	}
	longitude = location.getLongitude();
	latitude = location.getLatitude();
	AutoTestLog.i(TAG, "longitude:" + longitude);
	AutoTestLog.i(TAG, "latitude:" + latitude);
}

private LocationListener locationListener = new LocationListener() {

		/**
		 * 位置信息变化时触发
		 */
		public void onLocationChanged(Location location) {
			updateLocation(location);
			AutoTestLog.i(TAG, "getTime:" + location.getTime());
			AutoTestLog.i(TAG, "getAltitude:" + location.getAltitude());
		}

		/**
		 * GPS状态变化时触发
		 */
		public void onStatusChanged(String provider, int status, Bundle extras) {
			switch (status) {
			// GPS状态为可见时
			case LocationProvider.AVAILABLE:
				AutoTestLog.i(TAG, "GPS---AVAILABLE");
				break;
			// GPS状态为服务区外时
			case LocationProvider.OUT_OF_SERVICE:
				AutoTestLog.i(TAG, "GPS---OUT_OF_SERVICE");
				break;
			// GPS状态为暂停服务时
			case LocationProvider.TEMPORARILY_UNAVAILABLE:
				AutoTestLog.i(TAG, "GPS---TEMPORARILY_UNAVAILABLE");
				break;
			}
		}

		/**
		 * GPS开启时触发
		 */
		public void onProviderEnabled(String provider) {
			Location location = lm.getLastKnownLocation(provider);
			updateLocation(location);
		}

		/**
		 * GPS禁用时触发
		 */
		public void onProviderDisabled(String provider) {
			updateLocation(null);
		}

};

// 状态监听
GpsStatus.Listener listener = new GpsStatus.Listener() {
	public void onGpsStatusChanged(int event) {
		switch (event) {
		// 第一次定位
		case GpsStatus.GPS_EVENT_FIRST_FIX:
				AutoTestLog.i(TAG, "GPS_EVENT_FIRST_FIX");
				break;
		// 卫星状态改变
		case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
			AutoTestLog.i(TAG, "GPS_EVENT_SATELLITE_STATUS");
			// 获取当前状态
			GpsStatus gpsStatus = lm.getGpsStatus(null);
			// 获取卫星颗数的默认最大值
			int maxSatellites = gpsStatus.getMaxSatellites();
			// 创建一个迭代器保存所有卫星
			int count = 0;
			float f = -1;
			Iterator<GpsSatellite> iters = gpsStatus.getSatellites().iterator();
			while (iters.hasNext() && count <= maxSatellites) {
				GpsSatellite s = iters.next();// s.getSnr()
				if (f == -1) {
					f = s.getSnr();
				} else if (s.getSnr() > f) {
					f = s.getSnr();
				}

				if (s.usedInFix()) {
					count++;
				}
			}
			setStrength(f);
			setStartNumber(count);
			AutoTestLog.i(TAG, "count:" + count + "----f:" + f);
			break;
			// 定位启动
			case GpsStatus.GPS_EVENT_STARTED:
				AutoTestLog.i(TAG, "GPS_EVENT_STARTED");
				break;
			// 定位结束
			case GpsStatus.GPS_EVENT_STOPPED:
				AutoTestLog.i(TAG, "GPS_EVENT_STOPPED");
				break;
			}
		};
};