【问题标题】:Why isProviderEnabled() method always return true even inside the Building为什么 isProviderEnabled() 方法即使在建筑物内也总是返回 true
【发布时间】:2012-05-02 18:36:27
【问题描述】:

在这种情况下,我使用 GPS 作为提供程序,我尝试在建筑物内走动,但似乎找不到位置。是的,在建筑物中 GPS 不起作用是有道理的。那么,为什么 isProviderEnabled 返回 true?无论如何,我应该如何实现“搜索 GPS 信号”?

            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);

【问题讨论】:

    标签: android gps


    【解决方案1】:

    isProviderEnabled() 只看你是否启用了 GPS,它不关心你是否看到任何卫星!

    如果您想查看,是否有任何卫星,您必须使用gpslistener,这是使用 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;
    
                        }
    
                    }
                }
            });
    

    要使这个工作正常,您需要启动一个想要使用 gps 的 locationmanager,现在您的 gpslistner 可以检查是否有任何卫星在视野中并写入变量 true 或 false。之后,您可以检查变量。如果是真的(至少 4 颗卫星在视野中)你可以使用Criteria.ACCURACY_FINE 否则你可以使用Criteria.ACCURACY_COARSE. 不要忘记为两者设置权限!

    最好的问候

    野生动物园

    【讨论】:

    • 没问题,如果您需要帮助,只需将其写在下面的 cmets 中即可!我的 +1 和绿色勾号在哪里?哈哈:D
    • 顺便问一下,GPS_SAT_COUNT 是多少。我必须将其初始化为 4 吗?
    • 没错,它是一个设置在 4 上的整数。
    • 你在这里看到这一行:GpsSatellite satellite = satI.next();在这里,我转到 Interator 中的下一个对象。所以如果没有下一个物体(卫星),那么这段时间就结束了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-28
    • 2012-12-05
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    相关资源
    最近更新 更多