android 定位onStatusChanged不会执行

发布于 2022-09-03 01:20:21 字数 3102 浏览 30 评论 0

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

枕花眠 2022-09-10 01:20:21

GPS权限加了吗

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文