java - 即使使用 addNmeaListener 调用 OnNmeaMessageListener 也无法工作

标签 java android listener

这是我用来获取 Nmea 和海拔高度的接口(interface),但是当调用 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 接收器;它们不被操作系统缓存。 LocationManager.PASSIVE_PROVIDER 不会打开 GPS,因此提供商的选择不适合此用例。请尝试使用 GPS_PROVIDER

关于java - 即使使用 addNmeaListener 调用 OnNmeaMessageListener 也无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60319449/

相关文章:

java - JProfiler UnsatisfiedLinkError 启动时

android - Firebase 云消息传递 Gradle 设置

android - 适用于 Android 和 iOS 的应用内购买撤销机制

android - Theme.AppCompat.DayNight 不适用于 Android Lollipop

Javascript:监听多个异步 Google Maps API v3 请求以完成

java - 注释元数据的 Groovy 字 rune 字?

java - 用最大尺寸初始化 ArrayList

java - Hbase 扫描正在返回已删除的行

java - 如何找出所选文本的行号?

java - XMPP Smack API RosterListener + 数据库更改