车机平台Android4.4.3
车机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;
}
};
};