Java 即使使用addNmeaListener调用OnNmeaMessageListener,OnNmeaMessageListener也无法工作

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

这是我用来获取Nmea和海拔高度的接口,但是当调用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接收机;操作系统不会缓存它们<代码>位置管理器。被动_提供程序不会打开GPS,因此选择提供程序不适合此用例。请尝试使用
GPS\U提供商

NMEA字符串来自实时GPS接收器;操作系统不会缓存它们<代码>位置管理器。被动_提供程序不会打开GPS,因此选择提供程序不适合此用例。请尝试使用
GPS\u PROVIDER

请共享您代码中引用
gpsManager
的任何其他部分。我已将它们添加到问题中。请共享您代码中引用
gpsManager
的任何其他部分。我已将它们添加到问题中。谢谢您@greeble31这一切都很好,虽然如果我使用
网络供应商
,会怎么样?不客气,别忘了接受这个答案:)你可以测试它,自己回答这个问题,但你必须明白NMEA是一种非常特定于GPS的技术。网络提供商不使用该功能;这只是根据附近WiFi/cell网络的SSID猜测你的位置。谢谢你@greeble31这很好,不过如果我使用
网络供应商怎么办?
?不客气,别忘了接受这个答案:)你可以测试一下,自己回答这个问题,但你必须明白,NMEA是一项非常特定于GPS的技术。网络提供商不使用该功能;它只是根据附近WiFi/手机网络的SSID猜测您的位置。