我在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消息。
答案 0 :(得分:1)
GPS驱动程序中的NmeaParser
错误地处理了可变长度的GSV消息。我们刚刚发布了新的v1.1驱动程序,用于修复解析问题。您应该更新您的应用程序以指向最新的工件:
implementation 'com.google.android.things.contrib:driver-gps:1.1'