Получение силы GPS в Android - PullRequest
0 голосов
/ 31 мая 2011

В моем приложении я должен выяснить силу GPS.Тем не менее, когда я использую следующий код, я получаю 0 только для подсчета нет спутников.Итак, я не смог получить силу GPS.

Я пытался в течение длительного времени, но я не знаю ответа.Пожалуйста, помогите мне.

Мой код:

public void onCreate(Bundle savedInstanceState) {
  locMgr = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
  locMgr.addGpsStatusListener(onGpsStatusChange) ;
  onGpsStatusChange.onGpsStatusChanged(GpsStatus.GPS_EVENT_SATELLITE_STATUS);                     
 // Listener for GPS Status...
}

            final Listener onGpsStatusChange=new GpsStatus.Listener()
            {       
                    public void onGpsStatusChanged(int event)
                    {
                        Log.e("gps","in class");
                            switch(event)
                            {
                             case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
                                  GpsStatus xGpsStatus =locMgr.getGpsStatus(null) ;

                                  Iterable<GpsSatellite> iSatellites               =xGpsStatus.getSatellites();
                                  Iterator<GpsSatellite> it = iSatellites.iterator();
                                   int count=0;
                                   while(it.hasNext()){
                                    count=count+1;
                                        GpsSatellite oSat = (GpsSatellite) it.next();


                                        Log.e("gps",""+oSat.getSnr());   
                                   }
                                 Log.e("count",""+count);
                                 tv1.setText(""+count);
                             break;
                            }
                    }
            };

Ответы [ 3 ]

2 голосов
/ 31 мая 2011

Вы можете получить отношение сигнал-шум GPS каждого спутника из сигналов NMEA

 $GPGSV,2,1,08,01,40,083,46,02,17,308,41,12,07,344,39,14,22,228,45*75

Где:

      GSV          Satellites in view
      2            Number of sentences for full data
      1            sentence 1 of 2
      08           Number of satellites in view

      01           Satellite PRN number
      40           Elevation, degrees
      083          Azimuth, degrees
      46           SNR - higher is better
           for up to 4 satellites per sentence
      *75          the checksum data, always begins with *

Для прослушивания данных NMEA вам необходимо создать NMEA слушатель .

2 голосов
/ 09 декабря 2011

Я обнаружил, что лучший способ получить (и отфильтровать) точность и местоположение исправления - это использовать решение, найденное в: http://developer.android.com/guide/topics/location/obtaining-user-location.html#BestEstimate, и это ЛУЧШИЙ результат, который я получил до сих пор.

Предположим, у вас уже есть хорошее местоположение, и вы используете его (например, animateTo ..), а затем давайте предположим, что вы сохранили это местоположение в переменной Location и назвали его currentBestLocation.

Что вам нужно сделать, это поставитьметод isBetterLocation() (из "Поддержания текущей наилучшей оценки", который я только что разместил на сайте Google вверх) в своей активности, а затем, когда в вашем onLocationChanged() вы должны отправить currentBestLocation и местоположение, которое вы только что получили от onLocationChanged() до isBetterLocation() (например, с onLocationChanged() вы пишете isBetterLocation(location, currentBestLocation).

в isBetterLocation(), он отправит вам обратно true, если новое местоположение будет лучше, чем последнее местоположение, которое у вас есть сейчас(последнее местоположение - currentBestLocation)

Если оно возвращает true, это означает, что точность хорошая .. Вы должны использовать это местоположение (не забудьте обновить -> currentBestLocation = location)

Вот и все.

0 голосов
/ 31 мая 2011
private class MyGPSListener implements GpsStatus.Listener {
    public void onGpsStatusChanged(int event) {
        switch (event) {
            case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
                if (mLastLocation != null)
                    isGPSFix = (SystemClock.elapsedRealtime() - mLastLocationMillis) < 3000;

                if (isGPSFix) { // A fix has been acquired.
                    // Do something.
                } else { // The fix has been lost.
                    // Do something.
                }

                break;
            case GpsStatus.GPS_EVENT_FIRST_FIX:
                // Do something.
                isGPSFix = true;

                break;
        }
    }
}

ОК, теперь в onLocationChanged () вы должны добавить следующее:

@Override
public void onLocationChanged(Location location) {
    if (location == null) return;
    mLastLocationMillis = SystemClock.elapsedRealtime();
    // Do something.
    mLastLocation = location;
}

Надеюсь, приведенный выше код поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...