【问题标题】:Android API level question - added in 31 but runs on Android 11Android API 级别问题 - 在 31 中添加但在 Android 11 上运行
【发布时间】: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 函数中使用它作为第一个输入 - 提供者

标签: android locationmanager


【解决方案1】:

当我放下 LocationManager.FUSED_PROVIDER 时,Android Studio 不会抱怨我的 minSdkVersion。

也许你需要同步或重建什么的。它对我有用(最少 19 分钟):

有人可以帮我理解为什么 Android 11 可以运行一个使用 FUSED_PROVIDER 的函数,尽管它是在 API 级别 31 中添加的?

我的猜测是它可以工作,因为FUSED_PROVIDER 只是一个字符串。编译后,系统不需要或关心变量的名称,它只关心字符串值,显然任何版本的 Android 都可以处理。以前的 Android 版本理解“fused”是什么意思,但他们当然可以处理字符串“fused”而不会爆炸。

这与一个函数不同,比如addTestProvider,它也是在31中添加的,它会让你的旧版本Android相当崩溃。

这是否意味着我的 minSdkVersion 为 26 的手机也应该能够处理?

我想是的,是的。您可以使用模拟器轻松测试。

【讨论】:

  • 老实说,它不适合我——如果是这种情况,为什么我可以做 requestLocationUpdates (LocationManager.FUSED_PROVIDER,...) 并且我在我的Android 11 设备?
  • 我在回答中提到了这一点 - FUSED_PROVIDER 只是一个字符串。当您编译您的应用程序时,该字符串常量会被加入。系统不关心名称“FUSED_PROVIDER”它只关心它所包含的字符串,任何版本的 Android 都可以使用。
  • 我编辑了我的原始帖子 - 我能够在 Android 9 (API v28) 设备上运行编辑中引用的代码并且它工作正常。我很高兴它有效,但我试图理解为什么
猜你喜欢
  • 2014-01-01
  • 2022-08-12
  • 1970-01-01
  • 2016-11-18
  • 1970-01-01
  • 1970-01-01
  • 2019-04-16
  • 2011-11-02
  • 1970-01-01
相关资源
最近更新 更多