recherche

Maison  >  Questions et réponses  >  le corps du texte

定位服务 - android 定位onStatusChanged不会执行

使用 LocationListener 监听位置,代码如下:

LocationListener locationListener = new LocationListener() {
        /**
         * 位置发生变化
         * @param location
         */
        @Override
        public void onLocationChanged(Location location) {
        }

        /**
         * GPS关闭
         * @param provider
         */
        @Override
        public void onProviderDisabled(String provider) {
        }

        /**
         * GPS开启
         * @param provider
         */
        @Override
        public void onProviderEnabled(String provider) {
            // 当GPS LocationProvider可用时,更新位置
            setGpsStatus(0);
        }

        /**
         * GPS 状态发生变化
         * @param provider
         * @param status
         * @param extras
         */
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            switch (status) {
                // GPS状态为可见时
                case LocationProvider.AVAILABLE:
                    break;
                // GPS状态为服务区外时
                case LocationProvider.OUT_OF_SERVICE:
                    break;
                // GPS状态为暂停服务时
                case LocationProvider.TEMPORARILY_UNAVAILABLE:
                    break;
            }
        }
    };

如上,onStatusChanged 应该是监听GPS状态变化的,是否连接中或断开,但我在测试时,一直未触发上面的代码,

后来我用连接卫星的个数来判断:

GpsStatus.Listener listener = new GpsStatus.Listener() {
        public void onGpsStatusChanged(int event) {
            switch (event) {
                // 第一次定位
                case GpsStatus.GPS_EVENT_FIRST_FIX:

                    break;
                // 卫星状态改变
                case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
                    GpsStatus gpsStauts= locationManager.getGpsStatus(null); // 取当前状态
                    int maxSatellites = gpsStauts.getMaxSatellites(); //获取卫星颗数的默认最大值
                    Iterator<GpsSatellite> it = gpsStauts.getSatellites().iterator();//创建一个迭代器保存所有卫星
                    int gpsCount = 0;
                    while (it.hasNext() && gpsCount <= maxSatellites) {
                        GpsSatellite s = it.next();
                        //可见卫星数量
                        if(s.usedInFix()){
                            //已定位卫星数量
                            gpsCount++;
                        }
                    }
                    if( gpsCount == 0 && gpsStatus == 1 ){
                        //setGpsStatus(0);
                    }
                    break;
                // 定位启动
                case GpsStatus.GPS_EVENT_STARTED:
                    break;
                // 定位结束
                case GpsStatus.GPS_EVENT_STOPPED:
                    break;
            }
        };
    };

如果连接的个数为 0 表示GPS已掉线... 不过这样做还是有点问题,不是很准确 和 GPS Test 这个 APP 对比

请问大家,是写的不对还是什么原因?我主要是想获取GPS连接的状态,如果断开就实时显示,看网上有说

requestLocationUpdates(LocationManager.GPS_PROVIDER, 30000, 0, locationListener);

这里的时间 和 距离设置的范围太大等问题,距离我有设置过 0,8等,时间有设置过 3000都测试过还是不行

请教大家怎么修改呢?先谢!!

伊谢尔伦伊谢尔伦2771 Il y a quelques jours526

répondre à tous(1)je répondrai

  • 阿神

    阿神2017-04-17 17:27:04

    GPS权限加了吗

    répondre
    0
  • Annulerrépondre