为什么isProviderEnabled()方法总是楼内甚至返回true [英] Why isProviderEnabled() method always return true even inside the Building

查看:462
本文介绍了为什么isProviderEnabled()方法总是楼内甚至返回true的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在这种情况下,我使用GPS作为一个供应商,我尝试楼内行走,但看起来它没有找到的位置。是的,这是有道理的,在建设GPS无法工作。那么,为什么isProviderEnabled返回true?总之,什么是我应该实行搜索GPS信号的方式吗?

 字符串语境= Context.LOCATION_SERVICE;
            locman =(的LocationManager)getSystemService(背景);
            标准标准=新标准();
            criteria.setAccuracy(Criteria.ACCURACY_FINE);
            criteria.setAltitudeRequired(假);
            criteria.setBearingRequired(假);
            criteria.setPowerRequirement(Criteria.POWER_LOW);
            字符串提供商= locman.getBestProvider(标准,真正的);            如果(locman.isProviderEnabled(LocationManager.GPS_PROVIDER)){
            //从'搜索GPS信号使用GPS更改
                txtGPS.setText(使用GPS);            }
            locman.requestLocationUpdates(
                    供应商,MIN_TIME,MIN_DISTANCE,LocationListener的);


解决方案

isProviderEnabled()不仅看起来如果已经启用了GPS与否,它不到风度照顾,如果你看到任何卫星!

如果您要检查,如果有任何卫星,你必须使用 gpslistener ,这是如何使用gpslistner:

  / **
         *海尔wird EIN诺伊尔GPSListener标准化。创建。
         * DieserÜberprüftOB ES Sichtbare Sattelitten gibt。
         * /
        mLocationManager.addGpsStatusListener(新GpsStatus.Listener(){            公共无效onGpsStatusChanged(INT事件){                //海尔wird德EVENT gefiltert
                // Dieser事件erscheint音麦德恩GPS Satteliten在sicht信德
                如果(事件== GpsStatus.GPS_EVENT_SATELLITE_STATUS){
                    // GpsStatus卡斯腾
                    GpsStatus状态= mLocationManager.getGpsStatus(NULL);                    // Interable SATS instanzieren UND卡斯腾
                    可迭代< GpsSatellite> SATS = status.getSatellites();                    // SATCOUNT instanzieren,wirdbenötigt嗯死Satteliten祖zählen
                    INT SATCOUNT = 0;                    //迭代符萨提instanzieren UND卡斯腾。
                    迭代器< GpsSatellite>萨提= sats.iterator();                    //海尔wird死anzahl德Sattelitengezählt
                    而(satI.hasNext()){
                        //书斋迭代符奥夫巢穴nächstenSatteliten verweisen
                        GpsSatellite卫星= satI.next();                        // Satelittenzählen
                        SATCOUNT ++;
                        Log.d(GPSListner,虽然与SATCOUNT =+ SATCOUNT +高度卫星公司=+ satellite.getElevation());
                    }                    //PrüfenOB SATCOUNT 4 Satelitten帽子
                    如果(SATCOUNT> GPS_SAT_COUNT){                    字符串测试=将String.valueOf(SATCOUNT);
                    Log.d(GPSSTATUS,(真)Anzahl DER Sattelitten:+试验);                    //布尔mGpsOk AUF真正setzen
                    GPSService.mGpsOk = TRUE;
                    }其他{                    字符串测试2 =将String.valueOf(SATCOUNT);
                    Log.d(GPSSTATUS,(FASLE)Anzahl DER Sattelitten:+ TEST2);                    //布尔mGpsOk AUF假setzen
                    GPSService.mGpsOk = FALSE;                    }                }
            }
        });

要获得这一个工作,你需要开始其想要使用GPS,现在您可以gpslistner检查是否有针对任何卫星和写入的变量真或假的LocationManager。之后,您可以检查Variabel。如果其真正的(至少4视野中卫星),可以使用 Criteria.ACCURACY_FINE 否则你可以使用 Criteria.ACCURACY_COARSE。不要忘记设置权限为!

此致

Safari浏览器

In this case I use GPS as a Provider, I try walking inside the building but seem like it doesn't find the location. Yeah, it makes sense that in the building GPS not work. So, Why isProviderEnabled return true? Anyway, What is the way that i should implement "Searching for GPS signal"?

            String context = Context.LOCATION_SERVICE;
            locman = (LocationManager)getSystemService(context);


            Criteria criteria = new Criteria();
            criteria.setAccuracy(Criteria.ACCURACY_FINE);
            criteria.setAltitudeRequired(false);
            criteria.setBearingRequired(false);
            criteria.setPowerRequirement(Criteria.POWER_LOW);
            String provider = locman.getBestProvider(criteria, true);

            if (locman.isProviderEnabled( LocationManager.GPS_PROVIDER )) {
            // Change from 'Searching for GPS signal to Use GPS'
                txtGPS.setText("Use GPS");

            }
            locman.requestLocationUpdates(
                    provider,MIN_TIME, MIN_DISTANCE, locationListener);

解决方案

isProviderEnabled() only looks if you have enabled GPS or not, it dosn't take care if you see any satellites!

If you like to check, if there are any satellites you have to use the gpslistener and this is how to use the gpslistner:

/**
         * Hier wird ein neuer GPSListener erstellt.
         * Dieser Überprüft ob es Sichtbare Sattelitten gibt.
         */
        mLocationManager.addGpsStatusListener(new GpsStatus.Listener() {

            public void onGpsStatusChanged(int event) {

                // Hier wird der EVENT gefiltert
                // Dieser EVENT erscheint immer wenn GPS Satteliten in sicht sind
                if (event == GpsStatus.GPS_EVENT_SATELLITE_STATUS) {
                    // GpsStatus casten
                    GpsStatus status = mLocationManager.getGpsStatus(null);

                    // Interable sats instanzieren und casten
                    Iterable<GpsSatellite> sats = status.getSatellites();

                    // SATCOUNT instanzieren, wird benötigt um die Satteliten zu zählen
                    int SATCOUNT = 0;

                    // Interator satI instanzieren und casten.
                    Iterator<GpsSatellite> satI = sats.iterator();

                    // Hier wird die anzahl der Satteliten gezählt
                    while(satI.hasNext()){
                        // Den Interator auf den nächsten Satteliten verweisen
                        GpsSatellite satellite = satI.next();

                        // Satelitten zählen
                        SATCOUNT++;
                        Log.d("GPSListner", "While with SATCOUNT = " + SATCOUNT + " Elevation des Satellites = " + satellite.getElevation());


                    }

                    // Prüfen ob SATCOUNT 4 Satelitten hat
                    if(SATCOUNT > GPS_SAT_COUNT){

                    String test = String.valueOf(SATCOUNT);
                    Log.d("GPSSTATUS", "(true) Anzahl der Sattelitten: " + test );

                    // Boolean mGpsOk auf true setzen
                    GPSService.mGpsOk = true;
                    }else{

                    String test2 = String.valueOf(SATCOUNT);
                    Log.d("GPSSTATUS", "(fasle) Anzahl der Sattelitten: " + test2 );

                    // Boolean mGpsOk auf false setzen
                    GPSService.mGpsOk = false;

                    }

                }
            }
        });

To get this one working, you need to start a locationmanager which wants to use the gps, now your gpslistner can check if there are any satellites in view and writes a variable true or false. Afterwards you can check the Variabel. If its true (at least 4 Satellites in View) you can use Criteria.ACCURACY_FINE else you can use Criteria.ACCURACY_COARSE. Don't forget to set the permission for both!

Best Regards

safari

这篇关于为什么isProviderEnabled()方法总是楼内甚至返回true的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆