当前位置: 首页 > 科学 > 正文

gps开发 GPS开发是如今当前Andro

作者:admin 发布时间:2023-03-23 01:42:38 分类:科学 浏览:81


  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);}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;}}public void onProviderEnabled(String provider) {callback.GpsState(true);Location location=manager.getLastKnownLocation(provider);updateView(location);}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);


标签:id状态is定位卫星


相关推荐

最新推荐

关灯