【发布时间】:2016-05-05 16:47:24
【问题描述】:
我正在构建一个应用程序,它需要您当前的位置来初始化和显示地图。我正在使用LocationManager.requestLocationUpdates(...) 请求位置更新,但这似乎只会在位置发生变化时给我数据(例如,我移动了 10 英尺)。我也在尝试使用 getLastKnownLocation,但在一些不常见的情况下(例如打开 GPS 并且不移动打开应用程序)这将为我正在使用的所有提供者返回 null。
只要 getLastKnownLocation 返回 null,我的应用程序就无法初始化,直到我移动 10 英尺并接收到位置更新。到目前为止,我还没有找到一种方法来轮询我的位置,也没有发现任何暗示当我requestLocationUpdates(...) 我可以在我订阅的那一刻而不是在我等待指定的时间段或移动指定的距离。
一种方法是在非常小的时间间隔或 0 时间间隔内发送到 requestLocationUpdates(...),将其发送给我当前位置,删除 LocationListener 并再次删除 requestLocationUpdates(...),但这次我使用更大的值来避免流失电池。
我正在寻找更好的方法来解决这个问题。可能是 getCurrentLocation() 之类的东西,但实际上任何东西都有效。
【问题讨论】:
-
要获得准确的读数,任何解决方案都将涉及等待位置。如果 gps 提供商无法获取位置,您将获得空值。 FusedLocation API 有一些东西,你可以设置你想要的更新数量,这样你就可以得到一个,如果这就是你所需要的,但你仍然需要等待developers.google.com/android/reference/com/google/android/gms/…
-
“可能类似于 getCurrentLocation()”——不存在,因为不能保证您能够获得位置。除了用户在 Android 6.0+ 上禁用提供程序或阻止权限的标准问题外,设备可能由于环境因素而无法获取位置。例如,该设备可以在地下停车库中。是否存在具有某种超时值的
getCurrentLocation()?是的,但这对您自己实施并不是特别困难。
标签: android gps android-gps