Android LocationManager:Android 12 中的意外行为

Nat*_*han 5 gps android location locationmanager

现场用户报告了应用程序中 GPS 位置的随机问题。该应用程序使用 LocationManager 已有大约 12 年,几乎没有进行任何修改。

通过在运行 Android 12 的 Pixel 3 上进行测试,我发现了一些不可预测的行为。这些行为包括位置偏离半英里,并且除非其他应用程序使用 GPS,否则不会定期更新。

Android 11/12 中的位置管理器是否有一些不同之处?如果是这样,它们记录在哪里?我的代码从 Android 1.5 开始就运行良好。

我通过库使用它,但反编译给了我这个调用:

mLocationManager.requestLocationUpdates("gps", 250, 1, listener);
Run Code Online (Sandbox Code Playgroud)

我把它改为

   mLocationManager.requestLocationUpdates("gps", 100, 0, listener);
Run Code Online (Sandbox Code Playgroud)

它工作了一段时间,然后又停止工作了。更新不进来。

即使文档说我不应该需要后台位置来在活动或前台服务中使用位置,它是否需要后台位置?

如果不是,那到底是怎么回事?

Gab*_*han 1

前台服务仍然需要后台位置权限才能访问位置。这是因为它对用户来说并不明显,只是因为那里有一条通知表明它仍在使用 GPS。是的,这是在 Android 11 中添加的: https://developer.android.com/guide/components/foreground-services#bg-access-restrictions