Android位置:来自onNmeaReceived()的混乱结果

时间:2010-07-20 12:09:32

标签: android

我正在抨击Android本地化,并已经找到了如何接收NMEA数据。不幸的是,结果似乎非常混乱。我只需要GPRMC句子,但返回GPGGA,GPVTG等。有没有办法控制onNmeaReceived()函数?

public class TrackingService extends Service {

private Intent broadcastIntent = new Intent("com.example.locationlogger.TestBroadcastReceiver");
private LocationManager lm;
private LocationListener ll = new LocationListener(){
       //sample listener...
};

GpsStatus.NmeaListener nl = new GpsStatus.NmeaListener() {
   @Override
   public void onNmeaReceived(long timestamp, String nmea) {
      /*
       * Broadcast a message..
       */
      broadcastIntent.putExtra("TESTVAR", "Received some nmea strings: " + nmea);
      sendBroadcast(broadcastIntent);
   }
};

@Override
public void onCreate() {
   lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
}

@Override
public void onStart(Intent intent, int startId) {   
   lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, interval * 1000, 0, ll);
   lm.addNmeaListener(nl);
}

}

3 个答案:

答案 0 :(得分:2)

感谢您的回答 - 所有有效点。实际上我用正则表达式模式解决了它并使用matcher.find()来过滤相关的句子。在我的情况下,这是GPRMC句子,只有它包括有效数据。这是java正则表达式字符串 - 也许有人可以重复使用它。

public static Pattern p = Pattern.compile("(\\$GPRMC)\\,((\\d{6})\\.?\\d*)\\,([AV]{1})\\,(\\d*\\.?\\d*)\\,([NS]{1})\\,(\\d*\\.?\\d*)\\,([EW]{1})\\,([0-9]*\\.?[0-9]*)\\,([0-9]*\\.?[0-9]*)\\,([0-9]{6})\\,([0-9]*\\.?[0-9]*)\\,([EW]?)\\,([ADEMSN]{1}.*.[0-9A-F]{2})");

要了解我如何对正则表达式进行分组,请使用此正则表达式字符串

(\ $ GPRMC)\,((\ d {6})。?\ d *)\,([AV] {1})\,(\ d *。?\ d *)\,([ NS] {1})\,(\ d *。?\ d *)\,([EW] {1})\,([0-9]的。?[0-9] )\,([0-9]的。?[0-9] )\,([0-9] {6})\,([0-9]的。?[ 0-9] )\,([EW])\,([ADEMSN] {1}。* [0-9A-F] {2})

在这个网站

http://www.regexplanet.com/simple/index.html

这个NMEA句子

$ GPRMC,090248,A,4745.012742,N,01304.143827,E,0.0,0.0,310710,5.3,E,A * 48

此致 马丁

答案 1 :(得分:1)

只是为了确保...“混乱”,你只是意味着你得到所有的NMEA句子?即系统没有奇怪的行为?

因为这种行为似乎是记录在案的 - 你可以从GPS获得所有NMEA数据。

由于NMEA是纯文本,你不能只过滤掉你不想要的前缀吗?

答案 2 :(得分:0)

预计连续接收多个GPGSV句子,我认为如果你检查它们不相同,但是单个消息的一部分作为卫星的所有信息都不适合单个NMEA句子。在消息的前两个位置有一个句子序列号和构成消息的总句子数。

GPRMC只是单个句子,每个句子都包含“建议的最小”修正数据。