【发布时间】:2021-12-19 00:35:53
【问题描述】:
我正在尝试使用 LocationManager.FUSED_PROVIDER,根据 Android Dev 文档,它是在 API 级别 31 (Android 12) 中添加的
我的应用的 minSdkVersion 是 26
当我放下 LocationManager.FUSED_PROVIDER 时,Android Studio 不会抱怨我的 minSdkVersion。另外 - 我在 Android 11 上的测试手机(我认为是 API 级别 30)运行应用程序(包括定位功能)没有问题
有人可以帮我理解为什么 Android 11 可以运行使用 FUSED_PROVIDER 的函数,尽管它是在 API 级别 31 中添加的?这是否意味着我的 minSdkVersion 为 26 的手机也应该能够处理?
编辑:
我刚刚在 Android 9 设备(我闪存降级的备用设备)上运行了以下代码,并且该设备能够毫无错误地检索位置 - 由于 Android 9 是 API v28,因此不确定这是如何发生的
mLocationManager.requestLocationUpdates(LocationManager.FUSED_PROVIDER, 0, 0, mLocationListener);
【问题讨论】:
-
它是在 v26 上编译和运行,还是只编译?这些是不同的场景。 targetSDKVersion 控制编译,而不是最低限度。但是,如果您尝试在旧设备上实际使用该功能,这仍然会导致旧设备在运行时出现故障。您应该确保它确实在 26 版模拟器或设备上运行(设备更适合定位,因为模拟器不能真正很好地模拟定位)。
-
请解释一下您“放下LocationManager.FUSED_PROVIDER”的意思。
-
@GabeSechan 它可以编译,但我没有 v26 设备来运行它进行测试。但是,我可以在我的 Android 11 设备上运行它(我相信它是 v30 对吗?)并且该功能按预期工作 - 这就是为什么我感到困惑,因为我认为该功能在 Android 11 上不起作用,因为 FUSED_PROVIDER 添加了v31
-
@dominicoder 我在 requestLocationUpdates 函数中使用它作为第一个输入 - 提供者