首页 > 解决方案 > 即使使用 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);

标签: javaandroidlistener

解决方案


NMEA 字符串来自实时 GPS 接收器;它们没有被操作系统缓存。LocationManager.PASSIVE_PROVIDER不会打开 GPS,因此选择提供商不适合此用例。试试GPS_PROVIDER吧。


推荐阅读