0

私のアプリでは、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;
                            }
                    }
            };
4

3 に答える 3

2

精度を取得 (およびフィルタリング) して位置を修正する最善の方法は、http: //developer.android.com/guide/topics/location/obtaining-user-location.html#BestEstimateにあるソリューションを使用することであることがわかりました。 、そしてそれは私がこれまでに得た最高の結果です。

すでに適切な場所があり、それを利用するとします (例: animateTo ..)。次に、その場所を Location 変数に保存し、それを と呼びますcurrentBestLocation

あなたがすべきことはisBetterLocation()、あなたの活動に(Googleサイトに投稿したばかりの「現在の最良の見積もりを維持する」から)方法を入れて、あなたの中にあなたがちょうど得た場所とをonLocationChanged() 送信する必要があるとき です。あなたが書く。currentBestLocationonLocationChanged()isBetterLocation()onLocationChanged()isBetterLocation(location, currentBestLocation)

isBetterLocation()新しい場所が現在持っている最後の場所よりも優れている場合は、返信されますtrue(最後の場所は ですcurrentBestLocation)

それが true を返す場合、それは精度が良いことを意味します..その場所を使用する必要があります (更新することを忘れないでください --> currentBestLocation = location)

于 2011-12-09T15:10:38.097 に答える
2

NMEA センタンスから各衛星の GPS 信号対雑音比を取得できます。

 $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 リスナーを作成する必要があります。

于 2011-05-31T13:06:36.060 に答える
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;
        }
    }
}

OK、onLocationChanged()で、以下を追加する必要があります。

@Override
public void onLocationChanged(Location location) {
    if (location == null) return;
    mLastLocationMillis = SystemClock.elapsedRealtime();
    // Do something.
    mLastLocation = location;
}
于 2011-05-31T12:16:31.740 に答える