2011-05-31 3 views
0

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

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

Мой код:

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

ответ

0
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; 
} 

Я надеюсь, что выше размещен код, который вы помощь.

+0

не могли бы вы объяснить мне. где я пишу свой код проверки gps. –

+0

Ваш ответ был скопирован из [здесь] (http://stackoverflow.com/a/3712727/575376) –

2

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

$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 listener.

2

Я нашел, что лучший способ получить (и фильтровать) точность и место фиксации - использовать решение, найденное по адресу: 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)

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

Вот и все.

+0

Этот ответ кажется не связанным с вопросом –

Смежные вопросы