OnNmeaMessageListener即使在使用addNmeaListener调用时也不起作用

问题描述 投票:0回答:1

这是我用来获取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);
java android listener
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.