这是我用来获取 Nmea 和海拔高度的接口(interface),但是当调用 onNmeaMessageListener 时,它不会执行它。我使用 gpsManager 来调用它,它是 LocationManager 变量, 该代码既不起作用也不显示为错误。
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 接收器;它们不被操作系统缓存。 LocationManager.PASSIVE_PROVIDER
不会打开 GPS,因此提供商的选择不适合此用例。请尝试使用 GPS_PROVIDER
。
关于java - 即使使用 addNmeaListener 调用 OnNmeaMessageListener 也无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60319449/