java - 即使使用 addNmeaListener 调用 OnNmeaMessageListener 也不工作
问题描述
这是我用来获取 Nmea 和高度的接口,但是当调用 onNmeaMessageListener 时它不会执行它。我使用作为 LocationManager 变量的 gpsManager 调用它,代码既不工作也不显示为错误。
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
吧。
推荐阅读
- javascript - Gcloud API file.save() 数据格式
- javascript - 反应元素位置的 UseRef 和 forwardRef 问题
- c# - 如何将 Blazor WebAssembly 连接到数据库
- if-statement - 有人知道如何在 Atmega328p 的汇编中执行 if 语句吗?
- swift - 数据的自定义编码器
- angularjs - 使用 Angular JS 在高图表上绘制两条带有 JSON 数据的线的问题 - 名称未定义
- node.js - 使用 Twilio 函数发起出站呼叫
- python - 在 NLP 文本预处理中处理正则表达式时出错
- javascript - javascript中的单选按钮验证多个屏幕
- python - 如何使用 CTR 加密对图像进行加密?