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

 银仔-zxy 发布于 2022-10-29 17:38

使用 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 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都测试过还是不行

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

1 个回答
  • GPS权限加了吗

    2022-10-31 00:17 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有