在 Android 中获取 GPS 强度

Posted

技术标签:

【中文标题】在 Android 中获取 GPS 强度【英文标题】:Getting GPS strength in Android 【发布时间】:2011-09-05 10:42:17 【问题描述】:

在我的应用程序中,我必须找出 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;
                            
                    
            ;

【问题讨论】:

【参考方案1】:

您可以从 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 listener。

【讨论】:

【参考方案2】:

我发现获得(和过滤)准确性和修复位置的最佳方法是使用以下位置的解决方案: http://developer.android.com/guide/topics/location/obtaining-user-location.html#BestEstimate ,这是迄今为止我得到的最好结果。

假设你已经有了一个好的位置并且你利用它(例如 animateTo ..) 然后假设您将该位置保存在 Location 变量中,并将其命名为 currentBestLocation

你应该做的是把isBetterLocation()(来自“保持当前的最佳估计” 我刚刚在你的活动中发布了谷歌网站向上)方法,然后在你的onLocationChanged() 您应该将currentBestLocation 和您刚刚从onLocationChanged() 获得的位置发送到isBetterLocation() (例如,从onLocationChanged() 你写isBetterLocation(location, currentBestLocation)

isBetterLocation() 中,如果新位置比您现在拥有的最后一个位置更好(最后一个位置是currentBestLocation),它会将true 发回给您

如果返回 true,则表示准确度很好。您应该使用该位置 (别忘了更新——>currentBestLocation = location

【讨论】:

这个答案似乎与问题无关【参考方案3】:
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;

【讨论】:

以上是关于在 Android 中获取 GPS 强度的主要内容,如果未能解决你的问题,请参考以下文章

在 android 中获取更新位置和禁用 GPS 后如何获取?

在Python中获取精确的Android GPS位置

在 Python 中获取精确的 Android GPS 位置

android中如何获取WIFI信号的强度?

在 Android 中使用 GPS 获取当前位置

在 Android 9 及更高版本中,如何获取周围所有基站的 CID 和信号强度?