OnNmeaMessageListener не работает даже при вызове с использованием addNmeaListener - PullRequest
0 голосов
/ 20 февраля 2020

Это интерфейс, который я использую для получения 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);

1 Ответ

1 голос
/ 21 февраля 2020

NMEA строки поступают из живых GPS-приемников; они не кэшируются ОС. LocationManager.PASSIVE_PROVIDER не собирается включать GPS, поэтому выбор поставщика не подходит для этого варианта использования. Попробуйте GPS_PROVIDER вместо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...