private static final String GPS_LOCATION_NAME = android.location.LocationManager.GPS_PROVIDER;
private LocationManager mLocationManager;
private boolean isGpsEnabled;
private String locateType;
//默认定位时间间隔为10s
private long mMinTime = 10 * 1000L;
//默认位置可更新的最短距离为0m
private float mMinDistance = 0;
private int mGpsCount = 0;
public void initGPSlocation() {
//获取定位服务
mLocationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
String providerName = mLocationManager.getBestProvider(getCriteria(), false);
//判断是否开启GPS定位功能
isGpsEnabled = mLocationManager.isProviderEnabled(GPS_LOCATION_NAME);
Logger.i(TAG,"isGpsEnabled:"+isGpsEnabled + " providerName:"+ providerName);
//定位类型:GPS
locateType = mLocationManager.GPS_PROVIDER;
}
//定义要获取的GPS数据
public Criteria getCriteria() {
Criteria c = new Criteria();
c.setAccuracy(Criteria.ACCURACY_FINE);//高精度
c.setAltitudeRequired(true);//包含高度信息
c.setBearingRequired(true);//包含方位信息
c.setSpeedRequired(true);//包含速度信息
c.setCostAllowed(true);//允许付费
c.setPowerRequirement(Criteria.POWER_HIGH);//高耗电
return c;
}
启动定位
@Override
public void startGPSlocation() {
Location location = mLocationManager.getLastKnownLocation(locateType);
updatelocation(location);
mLocationManager.requestLocationUpdates(locateType, mMinTime, mMinDistance, mGPSLocationListener);
mLocationManager.addGpsStatusListener(mGpsStatusCallback);
}
GPS数据回调
private LocationListener mGPSLocationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
Logger.i(TAG,"GPSLocationListener onLocationChanged");
//当GPS位置发生改变时,更新位置
updatelocation(location);
view.onLocationChanged(location,mGpsCount);
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
Logger.i(TAG,"GPSLocationListener onStatusChanged" +status);
switch (status) {
case LocationProvider.AVAILABLE:
break;
case LocationProvider.OUT_OF_SERVICE:
break;
case LocationProvider.TEMPORARILY_UNAVAILABLE:
break;
default:
break;
}
}
@Override
public void onProviderEnabled(String provider) {
Logger.i(TAG,"GPSLocationListener onProviderEnabled");
}
@Override
public void onProviderDisabled(String provider) {
Logger.i(TAG,"GPSLocationListener onProviderDisabled");
}
};
private void updatelocation(Location location) {
if (location != null) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("实时位置信息\n");
stringBuilder.append("经度:");
stringBuilder.append(location.getLongitude());
stringBuilder.append("\n纬度:");
stringBuilder.append(location.getLatitude());
stringBuilder.append("\n高度:");
stringBuilder.append(location.getAltitude());
stringBuilder.append("\n速度:");
stringBuilder.append(location.getSpeed());
stringBuilder.append("\n时间:");
stringBuilder.append(location.getTime());
stringBuilder.append("\n精度:");
stringBuilder.append(location.getAccuracy());
stringBuilder.append("\n方位:");
stringBuilder.append(location.getBearing());
T.showShort(mContext, "currentLocation:" + stringBuilder.toString());
}
}
获取gps卫星数量
GpsStatus.Listener mGpsStatusCallback = new GpsStatus.Listener() {
@Override
public void onGpsStatusChanged(int event) {
if (event == GpsStatus.GPS_EVENT_SATELLITE_STATUS) {
//卫星状态改变
fetchCurGpsStatus();
}
}
};
private void fetchCurGpsStatus() {
GpsStatus mStatus = mLocationManager.getGpsStatus(null);
//获取卫星颗数的默认最大值
int maxSatellites = mStatus.getMaxSatellites();
//创建一个迭代器保存所有卫星
Iterator<GpsSatellite> iters = mStatus.getSatellites().iterator();
//卫星数
if (iters != null) {
while (iters.hasNext() && mGpsCount <= maxSatellites) {
GpsSatellite s = iters.next();
if (s.usedInFix()) {
mGpsCount++;
}
}
}
if (mGpsCount < 3) {
//定位失败
} else {
//定位成功
}
Logger.i(TAG,"fetchCurGpsStatus success " + mGpsCount);
}
该代码段展示了如何在Android中初始化并使用GPS定位服务。通过LocationManager获取最佳定位提供者,设置精度要求,然后监听位置变化和GPS状态。当GPS位置改变时,更新位置信息,并显示经纬度、高度、速度等详细数据。同时,监听GPS卫星状态以确定定位成功率。
6585

被折叠的 条评论
为什么被折叠?



