Android Things GPS ArrayIndexOutOfBoundsException

时间:2018-06-19 08:58:52

标签: java raspberry-pi gps android-things adafruit

我在Rasberry Pi 3上使用Adafruit Ultimate GPS Breakout v3和Android Things。使用以下驱动程序:

https://github.com/androidthings/contrib-drivers/tree/master/gps

我试图在按下按钮时显示TextView中的当前位置。 我可以记录NMEA消息,但频繁获取无效的GSV消息。它还使用ArrayIndexOutOfBoundsException很快崩溃。

有人可以帮忙吗?

这是日志:

  

:33:08.782 2536-2536 / com.google.android.things.contrib.driver.gps I / zygote:Deoptimizing void com.google.android.things.contrib.driver.gps.NmeaParser.handleSatelliteData(java。 lang.String [])由于块边界检查消除   06-19 08:33:08.783 2536-2536 / com.google.android.things.contrib.driver.gps D / AndroidRuntime:关闭VM   06-19 08:33:08.791 2536-2536 / com.google.android.things.contrib.driver.gps E / AndroidRuntime:FATAL EXCEPTION:main       流程:com.google.android.things.contrib.driver.gps,PID:2536       java.lang.ArrayIndexOutOfBoundsException:length = 19;指数= 19           在com.google.android.things.contrib.driver.gps.NmeaParser.handleSatelliteData(NmeaParser.java:199)           在com.google.android.things.contrib.driver.gps.NmeaParser.processMessageFrame(NmeaParser.java:101)           在com.google.android.things.contrib.driver.gps.NmeaGpsModule.handleFrameEnd(NmeaGpsModule.java:206)           在com.google.android.things.contrib.driver.gps.NmeaGpsModule.processBuffer(NmeaGpsModule.java:175)           在com.google.android.things.contrib.driver.gps.NmeaGpsModule.readUartBuffer(NmeaGpsModule.java:160)           在com.google.android.things.contrib.driver.gps.NmeaGpsModule.access $ 000(NmeaGpsModule.java:41)           在com.google.android.things.contrib.driver.gps.NmeaGpsModule $ 1.onUartDeviceDataAvailable(NmeaGpsModule.java:138)           在com.google.android.things.pio.UartDeviceImpl $ UartDeviceCallbackDispatch.dispatchInterruptEvent(UartDeviceImpl.java:250)           在com.google.android.things.pio.CallbackDispatch.onFileDescriptorEvents(CallbackDispatch.java:149)           在android.os.MessageQueue.dispatchEvents(MessageQueue.java:284)           在android.os.MessageQueue.nativePollOnce(本机方法)           在android.os.MessageQueue.next(MessageQueue.java:325)           在android.os.Looper.loop(Looper.java:142)           在android.app.ActivityThread.main(ActivityThread.java:6494)           at java.lang.reflect.Method.invoke(Native Method)           在com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run(RuntimeInit.java:438)           在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)   06-19 08:33:08.804 2536-2536 / com.google.android.things.contrib.driver.gps I / Process:发送信号。 PID:2536 SIG:9

更新:

此处将NmeaParser从19更改为2:

// Parse the satellites in this message
for (int i = 4; i < 2; i += 4) {
    if (!nmea[i].isEmpty()) {
        Satellite sat = new Satellite();
        sat.svid = Integer.parseInt(nmea[i]);
        sat.elevation = parseTrackAngle(nmea[i+1]);
        sat.azimuth = parseTrackAngle(nmea[i+2]);
        sat.snr = parseSignal(nmea[i+3]);

        mSatellites.put(sat.svid, sat);
    }
}

我没有得到崩溃,但我仍然收到无效的GSV消息。

1 个答案:

答案 0 :(得分:1)

GPS驱动程序中的NmeaParser错误地处理了可变长度的GSV消息。我们刚刚发布了新的v1.1驱动程序,用于修复解析问题。您应该更新您的应用程序以指向最新的工件:

implementation 'com.google.android.things.contrib:driver-gps:1.1'