在 Samsung J7 上测试使用 OnNmeaMessageListener 的应用程序时,该应用程序会因此错误而中断
我真的不明白问题是什么,我已经在其他设备上进行了测试,并且该应用程序可以正常工作。
我正在测试的代码:
LM.addNmeaListener(new OnNmeaMessageListener() {
@Override
public void onNmeaMessage(String nmea, long timestamp) {
// do stuff
}
});
好的,我找到了 24 以下 SDK 版本的可能解决方案
if(Build.VERSION.SDK_INT <= Build.VERSION_CODES.N) {
GpsStatus.NmeaListener nmeaListenerDeprecated = new GpsStatus.NmeaListener() {
@Override
public void onNmeaReceived(long timestamp, String nmea) {
processNmeaData(nmea, timestamp);
}
};
try {
//noinspection JavaReflectionMemberAccess
Method addNmeaListener =
LocationManager.class.getMethod("addNmeaListener", GpsStatus.NmeaListener.class);
addNmeaListener.invoke(LM, nmeaListenerDeprecated);
} catch (Exception exception) {
// TODO
}
} else {
LM.addNmeaListener(new OnNmeaMessageListener() {
@Override
public void onNmeaMessage(String nmea, long timestamp) {
processNmeaData(nmea, timestamp);
}
});
}
通过该解决方案,我成功地让 NMEA 适用于新设备和旧设备。