2

この場合、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);
4

1 に答える 1

4

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 を書き込むことができます。その後、Variabel を確認できます。true の場合 (View に少なくとも 4 つのサテライトがある場合) を使用Criteria.ACCURACY_FINEできますCriteria.ACCURACY_COARSE.

よろしくお願いします

サファリ

于 2012-05-02T10:36:27.197 に答える