Java 即使使用addNmeaListener调用OnNmeaMessageListener,OnNmeaMessageListener也无法工作
这是我用来获取Nmea和海拔高度的接口,但是当调用onNmeaMessageListener时,它不会执行它。我用gpsManager调用它,它是LocationManager变量, 该代码既不起作用,也不会显示为错误Java 即使使用addNmeaListener调用OnNmeaMessageListener,OnNmeaMessageListener也无法工作,java,android,listener,Java,Android,Listener,这是我用来获取Nmea和海拔高度的接口,但是当调用onNmeaMessageListener时,它不会执行它。我用gpsManager调用它,它是LocationManager变量, 该代码既不起作用,也不会显示为错误 OnNmeaMessageListener onNmeaMessageListener = (nmea, timestamp) -> { Log.d("TrackManager", " NMEA : " + nmea + " TimeStamp : " + time
OnNmeaMessageListener onNmeaMessageListener = (nmea, timestamp) -> {
Log.d("TrackManager", " NMEA : " + nmea + " TimeStamp : " + timestamp);
if (trackStarted && !trackPaused) {
if (nmea.startsWith("$GPGGA") || nmea.startsWith("$GPRMC")) {
Log.d("TrackManager", "NMEA:" + nmea);
try {
out.write(nmea.getBytes());
if (continuesMode) {
dataOut.write(nmea.getBytes());
bufferedNMEALines++;
if (bufferedNMEALines >= 10) {
flushContinuesTrack();
//dataOut.reset();
bufferedNMEALines = 0;
}
} else {
outCompressed.write(nmea.getBytes());
}
// Log.d("TrackManager","NMEA:" + nmea);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (nmea.startsWith("$GPGGA")) {
String[] nmeaSplit = nmea.split(",");
if (nmeaSplit.length > 10) {
if (nmeaSplit[9].length() > 0) {
try {
mslAltitude = Float.parseFloat(nmeaSplit[9]);
} catch (NumberFormatException ex) {
mslAltitude = 0;
}
} else {
mslAltitude = 0.0f;
}
}
}
}
}
if (markStarted && hasFix() && nmea.startsWith("$GPRMC")) {
markProgress++;
trackListener.onMarkProgress(markProgress);
if (markProgress >= markMax) {
stopMark();
}
}
};
我就是这么叫它的
gpsManager.addNmeaListener(onNmeaMessageListener);
编辑
声明:
private LocationManager gpsManager;
在onCreate中初始化,如下所示:
gpsManager = (LocationManager)
getSystemService(LOCATION_SERVICE);
还更新了位置:
gpsManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER,
GPS_UPDATE_TIME, 0, gpsListener);
NMEA字符串来自实时GPS接收机;操作系统不会缓存它们<代码>位置管理器。被动_提供程序不会打开GPS,因此选择提供程序不适合此用例。请尝试使用
GPS\U提供商
。NMEA字符串来自实时GPS接收器;操作系统不会缓存它们<代码>位置管理器。被动_提供程序不会打开GPS,因此选择提供程序不适合此用例。请尝试使用GPS\u PROVIDER
。请共享您代码中引用gpsManager
的任何其他部分。我已将它们添加到问题中。请共享您代码中引用gpsManager
的任何其他部分。我已将它们添加到问题中。谢谢您@greeble31这一切都很好,虽然如果我使用网络供应商
,会怎么样?不客气,别忘了接受这个答案:)你可以测试它,自己回答这个问题,但你必须明白NMEA是一种非常特定于GPS的技术。网络提供商不使用该功能;这只是根据附近WiFi/cell网络的SSID猜测你的位置。谢谢你@greeble31这很好,不过如果我使用网络供应商怎么办?
?不客气,别忘了接受这个答案:)你可以测试一下,自己回答这个问题,但你必须明白,NMEA是一项非常特定于GPS的技术。网络提供商不使用该功能;它只是根据附近WiFi/手机网络的SSID猜测您的位置。