GPS开发

作者: 渝聆墨 | 来源:发表于2017-02-06 23:17 被阅读414次

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 LocationListener() {/** * 位置信息变化时触发 */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);

相关文章

  • GPS开发

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

  • 百度地图之定位

    iOS中三种定位方式 ioS开发之CoreLocation(GPS定位) iOS自带的GPS 定位 iOS开发 C...

  • 周四

    基于lbs服务端开发 lbs和gps是有区别的 gps误差小 百度 腾讯 高德等都有lbs服务应用 谷歌最牛...

  • 地理位置研发二三事

    GPS坐标系 火星坐标系 IP地址定位 如果你要开发一个基于 GPS 甚至 IP 地址进行地址定位的功能时,你需要...

  • iOS开发 GPS(附Demo)

    1 简单介绍 单纯的使用GPS,用系统带的CoreLocation就可以。 2 导入CoreLocation.fr...

  • 部标视频平台开发技术

    开发企业级的北斗/GPS部标监控平台,投入的资金人员很大,开发周期很长,在设计之初必须选好开发语言和技术架构,以免...

  • 时间相关

    GPS周(GPS Week) GPS周(GPS Week)是GPS系统内部所采用的时间系统。 时间零点定义的为:1...

  • ios开发 获取设备GPS信息

    1、在Info.plist文件中添加如下配置: (1)NSLocationAlwaysUsageDescripti...

  • Gps开发实战——卫星数量获取

    卫星数量有两种:卫星总数(all),和已校准卫星数(fixed); 卫星数量来源于gps定位数据,gps数据来源又...

  • 2019-11-29GPS干扰技术解析

    GPS工作原理 GPS技术参数指标 常用GPS干扰技术及干扰原理 北斗系统干扰/抗干扰能力 - GPS定位原理 G...

网友评论

      本文标题:GPS开发

      本文链接:https://www.haomeiwen.com/subject/trqupttx.html