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开发

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