gpt4 book ai didi

android - 当针对目标 API 级别 29 进行编译时,能否在 Android API 级别 < 24 上访问 NMEA?

转载 作者:行者123 更新时间:2023-12-02 14:26:04 38 4
gpt4 key购买 nike

我刚刚尝试将应用程序的目标和编译 API 级别更新为 29 (Android 10),并注意到我无法再编译,因为 LocationManager.addNmeaListener 只接受 OnNmeaMessageListener (在 API 级别 24 中引入)而不是旧的且已弃用的 GpsStatus.NmeaListener (因此,我得到“不兼容的类型:NmeaListener 无法转换为 OnNmeaMessageListener”)。

我知道 addNmeaListener(NmeaListener) 在以前的版本中已被弃用,我准备重构我的代码以分支到不同的 API 级别,但因为我找不到任何具有不同名称的已弃用方法或 LocationManager 的任何兼容性库,如果我以 Android 10 为目标(这在某些时候将是强制性的),似乎无法访问 Android 6 设备上的 NMEA 数据。

关于如何在旧设备上仍然获取 NMEA 数据有什么建议吗?

如果有人对如何避免 NMEA 数据有想法,请提供一些额外的背景信息:我们的应用程序“phyphox”旨在允许学生使用手机中的传感器进行物理实验。对我们来说,在旧设备(Android 4+)上运行非常重要,因为在物理教育中使用智能手机传感器对于资金很少的学校和学生来说尤其有值(value)。同时,我们希望在所有设备(新/旧、Android/iOS)上获得可比较的实验结果。因此,我们需要 NMEA 数据来计算大地水准面上方的高度,而不是 WGS84 椭球体上方的高度(由 Location.getAltitude() 提供),以便学生获得一致且可比较的结果。因此,也欢迎任何关于实现这一目标的替代方法的建议。

您可以在此处查看 API 28 的当前代码:

https://github.com/Staacks/phyphox-android/blob/master/app/src/main/java/de/rwth_aachen/phyphox/gpsInput.java

最佳答案

Android SDK 29 版本似乎存在问题,并且遗漏了提供向后兼容性的方法。

There is an issue opened in the Android bugtracker

从该问题中Android工程师的评论来看,推荐的方法是通过反射访问它......我仍然需要测试它,但我猜它会在以下行中:

nmeaListenerDeprecated = new GpsStatus.NmeaListener() {
@Override
public void onNmeaReceived(long timestamp, String message) {
// TODO
}
};
try {
//noinspection JavaReflectionMemberAccess
Method addNmeaListener =
LocationManager.class.getMethod("addNmeaListener", GpsStatus.NmeaListener.class);
addNmeaListener.invoke(locationManager, nmeaListenerDeprecated);
} catch (Exception exception) {
// TODO
}

编辑:.invoke() 调用中缺少参数。它需要目标对象引用来执行调用! (自从学习反射以来太久了......并且从那以后就没有使用过它!)

关于android - 当针对目标 API 级别 29 进行编译时,能否在 Android API 级别 < 24 上访问 NMEA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57975969/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com