当前位置:首页 > 风云人物 > GPS开发

GPS开发

2023-12-30 08:17:50 来源:金风故事网

GPS开发是如今当前Android开发较为常用的工具。它的开发主要获取定位点的经度纬度,卫星个数,卫星型号等相关数据。

主要运用的LocationManager定位管理器获取相关定位信息。

开发流程如下:

1,初始化管理器

2,获取地理位置信息查询条件

3,监听状态

4,监听位置信息

5,启用GPS.

6,关闭GPS

一,初始化GPS定位管理器:

LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

// 判断GPS是否正常启动

if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {

//ErrorHandler.showError("GPS未正常启动,请开启后重试!");

DialogPrompt.showDialogPrompt(context, handler,"GPS未正常启动,是否打开GPS设置页面!", 10);

return;

}

// 为获取地理位置信息时设置查询条件

String bestProvider = manager.getBestProvider(getCriteria(), true);

// 获取位置信息

// 如果不设置查询要求,getLastKnownLocation方法传人的参数为LocationManager.GPS_PROVIDER

Location location = manager.getLastKnownLocation(bestProvider);

二,获取地理位置查询条件

调用方法:

LocationManager.getBestProvider(getCriteria(), true);

条件设置:

private Criteria getCriteria() {

Criteria criteria = new Criteria();

// 设置定位精确度 Criteria.ACCURACY_COARSE比较粗略,Criteria.ACCURACY_FINE则比较精细

criteria.setAccuracy(Criteria.ACCURACY_FINE);

// 设置是否要求速度

criteria.setSpeedRequired(true);

// 设置是否允许运营商收费

criteria.setCostAllowed(false);

// 设置是否需要方位信息

criteria.setBearingRequired(true);

// 设置是否需要海拔信息

criteria.setAltitudeRequired(true);

// 设置对电源的需求

criteria.setPowerRequirement(Criteria.POWER_LOW);

return criteria;

}

三,监听状态信息GpsStatus.Listener

通过调用LocationManager.addGpsStatusListener(GpsStatus.Listener);监听GPS当前信息和状态:

// 状态监听GpsStatus.Listener listener = new GpsStatus.Listener() {public void onGpsStatusChanged(int event) {switch (event) {// 第一次定位case GpsStatus.GPS_EVENT_FIRST_FIX:Log.i(TAG, "第一次定位");break;// 卫星状态改变case GpsStatus.GPS_EVENT_SATELLITE_STATUS:callback.GpsState(true);Log.i(TAG, "卫星状态改变");// 获取当前状态GpsStatus gpsStatus = manager.getGpsStatus(null);// 获取卫星颗数的默认最大值int maxSatellites = gpsStatus.getMaxSatellites();// 创建一个迭代器保存所有卫星

Iteratoriters = gpsStatus.getSatellites()

.iterator();

int count = 0;

int maxcount=0;

float snr = 0;

float azimuth=0;

map.clear();

while (iters.hasNext() && maxcount <= maxSatellites) {

GpsSatellite s = iters.next();

azimuth=s.getAzimuth();//方位角

s.getElevation();//仰角

snr=s.getSnr();//信噪比

if (snr>0) {

count++;

if (map.size()>15) {

map.clear();

}else{

map.put(count, snr);

}

}

maxcount++;

}

callback.GpsreturnMoon(map, count, maxcount,azimuth);

System.out.println("搜索到:" + count + "颗卫星");

break;

// 定位启动

case GpsStatus.GPS_EVENT_STARTED:

Log.i(TAG, "定位启动");

callback.GpsState(true);

break;

// 定位结束

case GpsStatus.GPS_EVENT_STOPPED:

Log.i(TAG, "定位结束");

callback.GpsState(false);

break;

}};};

四,监听位置信息LocationListener

// 位置监听private LocationListener locationListener = new Loca(曹县人为什么被全国骂?曹县人为什么被全国骂有两个说法,说法一:主播把曹县搞得乌烟瘴气。说法二:有些人嫉妒曹县在短视频平台火起来。现在曹县已经牛逼到被大家称为北上广曹,曹县人被全国骂同样是网友的调侃。)tionListener() {/** * 位置信息变化时触发 */public void onLocationChanged(Location location) {Log.i(TAG, "时间:" + location.getTime());Log.i(TAG, "经度:" + location.getLongitude());Log.i(TAG, "纬度:" + location.getLatitude());Log.i(TAG, "海拔:" + location.getAltitude());updateView(location);}/** * GPS状态变化时触发 */public void onStatusChanged(String provider, int status, Bundle extras) {switch (status) {// GPS状态为可见时case LocationProvider.AVAILABLE:Log.i(TAG, "当前GPS状态为可见状态");Location location = manager.getLastKnownLocation(provider);callback.GpsState(true);break;// GPS状态为服务区外时case LocationProvider.OUT_OF_SERVICE:Log.i(TAG, "当前GPS状态为服务区外状态");callback.GpsState(false);break;// GPS状态为暂停服务时case LocationProvider.TEMPORARILY_UNAVAILABLE:Log.i(TAG, "当前GPS状态为暂停服务状态");callback.GpsState(false);break;}}/** * GPS开启时触发 */public void onProviderEnabled(String provider) {callback.GpsState(true);Location location = manager.getLastKnownLocation(provider);updateView(location);}/** * GPS禁用时触发 */public void onProviderDisabled(String provider) {callback.GpsState(false);}};HashMapmap=new HashMap();// 状态监听GpsStatus.Listener listener = new GpsStatus.Listener() {public void onGpsStatusChanged(int event) {switch (event) {// 第一次定位case GpsStatus.GPS_EVENT_FIRST_FIX:Log.i(TAG, "第一次定位");break;// 卫星状态改变case GpsStatus.GPS_EVENT_SATELLITE_STATUS:callback.GpsState(true);Log.i(TAG, "卫星状态改变");// 获取当前状态GpsStatus gpsStatus = manager.getGpsStatus(null);// 获取卫星颗数的默认最大值int maxSatellites = gpsStatus.getMaxSatellites();// 创建一个迭代器保存所有卫星Iteratoriters = gpsStatus.getSatellites()

.iterator();

int count = 0;

int maxcount=0;

float snr = 0;

float azimuth=0;

map.clear();

while (iters.hasNext() && maxcount <= maxSatellites) {

GpsSatellite s = iters.next();

azimuth=s.getAzimuth();//方位角

s.getElevation();//仰角

snr=s.getSnr();//信噪比

if (snr>0) {

count++;

if (map.size()>15) {

map.clear();

}else{

map.put(count, snr);

}

}

maxcount++;

}

callback.GpsreturnMoon(map, count, maxcount,azimuth);

System.out.println("搜索到:" + count + "颗卫星");

break;

// 定位启动

case GpsStatus.GPS_EVENT_STARTED:

Log.i(TAG, "定位启动");

callback.GpsState(true);

break;

// 定位结束

case GpsStatus.GPS_EVENT_STOPPED:

Log.i(TAG, "定位结束");

callback.GpsState(false);

break;

}

};

};

五,启用GPS服务

LocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000,1,

LocationListener);

六,关闭GPS服务

LocationManager.removeUpdates(LocationListener);

相关内容推荐
风云人物最新文章
精华推荐
热门图文