GPS信号强度与GPS定位

定位类型声明:

public boolean isOpenProvider() {
    //获取定位服务
    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    //获取当前可用的位置控制器
    List<String> list = locationManager.getProviders(true);

    if (list.contains(LocationManager.GPS_PROVIDER)) {
        //是否为GPS位置控制器
        provider = LocationManager.GPS_PROVIDER;
    } else {
        return false;
    }
    return true;
}
private void startLocationService() {
    //检查位置提供器是否开启,如果开启则给provider赋值
    if (isOpenProvider()) {
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return;
        }
        //绑定定位事件,监听位置是否改变
        //第一个参数为控制器类型第二个参数为监听位置变化的时间间隔(单位:毫秒)
        //第三个参数为位置变化的间隔(单位:米)第四个参数为位置监听器
        locationManager.requestLocationUpdates(provider, 2000, (float) 5,
                locationListener);
        //监听卫星信号强度
        locationManager.addGpsStatusListener(statusListener);
    } else {
        /*Toast.makeText(this, "请检查网络或GPS是否打开",
                Toast.LENGTH_LONG).show();*/
    }
}

GPS信号强度监听

//定义LocationManageprivate LocationManager locationManager;locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);//监听卫星信号强度locationManager.addGpsStatusListener(statusListener)

/** 
* 卫星信号强度监听
 */
第一种:监听卫星信噪比
GpsStatus.Listener statusListener = new GpsStatus.Listener() {
    @Override
    public void onGpsStatusChanged(int event) {
        switch (event) {
            //卫星状态改变
            case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
                //获取当前状态
                @SuppressLint("MissingPermission") GpsStatus gpsStatus = locationManager.getGpsStatus(null);
                //获取卫星颗数的默认最大值
                int maxSatellites = gpsStatus.getMaxSatellites();

                //获取所有的卫星
                Iterator<GpsSatellite> iters = gpsStatus.getSatellites().iterator();
                //卫星颗数统计
                int count = 0;
                signalCont = 0;//每监听一次对之前的信号清0
                while (iters.hasNext() && count <= maxSatellites) {
                    count++;
                    GpsSatellite s = iters.next();
                    //卫星的信噪比
                    float snr = s.getSnr();
                    signalCont = signalCont + snr;
                }
                break;
            default:
                break;
        }

    }
};

第二种:监听有效微信颗数

/**
 * gps状态监听类,用于gps获取gps信号强弱
 */
GpsStatus.Listener gpsStatusListener = new GpsStatus.Listener() {

    @Override
    public void onGpsStatusChanged(int event) {
        switch (event) {
            //第一次定位
            case GpsStatus.GPS_EVENT_FIRST_FIX:
                Log.i(TAG, "第一次定位");
                break;
            //卫星状态改变
            case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
                try {
                    Log.i(TAG, "卫星状态改变");
                    //获取当前状态
                    @SuppressLint("MissingPermission") GpsStatus gpsStatus = locationManager.getGpsStatus(null);
                    //获取卫星颗数的默认最大值
                    int maxSatellites = gpsStatus.getMaxSatellites();
                    //创建一个迭代器保存所有卫星
                    Iterator<GpsSatellite> iters = gpsStatus.getSatellites().iterator();
                    int totalCount = 0;
                    int validCount = 0;
                    while (iters.hasNext() && totalCount <= maxSatellites) {
                        GpsSatellite s = iters.next();
                        //已定位卫星数量
                        if (s.usedInFix()) {
                            validCount++;
                        }
                        totalCount++;
                    }
                    System.out.println("搜索到:" + totalCount + "颗卫星");
                    System.out.println("有效卫星:" + validCount + "颗");
                } catch (Exception e) {
                    e.printStackTrace();
                }

                break;
            //定位启动
            case GpsStatus.GPS_EVENT_STARTED:
                Log.i(TAG, "定位启动");
                break;
            //定位结束
            case GpsStatus.GPS_EVENT_STOPPED:
                Log.i(TAG, "定位结束");
                break;
        }

    }
};

一般来说有效卫星有7颗以上,才可以获取到GPS位置信息。

定位位置实时监听:

//当位置发生变化时,会触发这个监听
    private LocationListener locationListener = new LocationListener() {

        /**
         * 位置信息变化时触发
         * @param location
         */
        @Override
        public void onLocationChanged(Location location) {
             //实时获取Location 位置信息    
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
        }

        /**
         * GPS开启时触发
         * @param provider
         */
        @Override
        public void onProviderEnabled(String provider) {

        }

        /**
         *  GPS禁用时触发
         * @param provider
         */
        @Override
        public void onProviderDisabled(String provider) {
        }
    };

猜你喜欢

转载自blog.csdn.net/sunqihui22/article/details/93465267
GPS