android - 为什么 isProviderEnabled() 方法即使在建筑物内部也始终返回 true

标签 android gps

在这种情况下,我使用 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);

最佳答案

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 的位置管理器,现在您的 GPSlistner 可以检查 View 中是否有任何卫星并写入变量 true 或 false。之后您可以检查 Variabel。如果为真( View 中至少有 4 个卫星),您可以使用 Criteria.ACCURACY_FINE,否则您可以使用 Criteria.ACCURACY_COARSE。 不要忘记为两者设置权限!

最诚挚的问候

Safari

关于android - 为什么 isProviderEnabled() 方法即使在建筑物内部也始终返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10411998/

相关文章:

android - 如何将 Azure 服务总线通知中心的 IP 告诉 Google?

android - Android 上通过 SSL 上传的 HttpsURLConnection 卡住(具有不同的故障模式)

Android L 凸起的普通按钮

android - eclipse +安卓+Cocos2d-x : Why does the emulation only work once?

java - 如何让PagerAdapter加载所有页面

c# - 如何使用 Xamarin 在 Android 中同步获取 GPS 位置更新?

android.location.Address 无法被 AIDL 识别?

php - 使用 google maps api 将当前 gps 坐标发送到 mySQL 数据库

android - 融合的位置提供者似乎没有使用 GPS 接收器

android - 如何在android中发送关于我的位置地址的短信