我正在构建一个需要您当前位置初始化并显示地图的应用。我正在使用LocationManager.requestLocationUpdates(...)
请求位置更新,但这只会在位置发生变化时显示给我数据(例如我移动10英尺)。我也尝试使用getLastKnownLocation,但是在一些不常见的情况下(比如打开GPS而不移动打开应用程序),这将为我正在使用的所有提供者返回null。
每当getLastKnownLocation返回null时,我的应用程序无法初始化,直到我移动10英尺并接收位置更新。到目前为止,我还没有找到一种方法来轮询我的位置,也没有找到任何暗示当我requestLocationUpdates(...)
我可以在订阅时获得我的第一个数据而不是在我等待指定时间时期间或移动指定的距离。
一种方法是requestLocationUpdates(...)
在非常小或0的时间间隔,得到它发送给我我当前的位置,删除LocationListener并再次requestLocationUpdates(...)
,但这次有更大的值我用来避免电池耗尽。
我正在寻找一种更好的方法来解决这个问题。可能类似于getCurrentLocation(),但实际上任何有用的东西。
答案 0 :(得分:2)
我正在请求位置更新 LocationManager.requestLocationUpdates(...),但这只是出现 当位置改变时给我数据(例如我移动10英尺)。
一旦确定了位置,它将为您提供第一个位置更新 - 无论您是否正在移动。在一段时间内继续倾听更多更新并不是一个坏主意,因为第一个更新可能不太准确。
我正在寻找一种更好的方法来解决这个问题。可能是类似的东西 getCurrentLocation(),但实际上是有效的。
如果您不想接收持续更新,那么LocationManager.requestSingleUpdate()个变种之一呢?
这些只会在onLocationChanged()
回调中(或通过Intent
)为您提供一个位置更新。无需取消任何听众等。电话可能是这样的:
locationManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, this, Looper.getMainLooper());
答案 1 :(得分:1)
我认为你只使用onLocationChanged方法来完成你的工作。
这样做。
@Override
public void onConnected(@Nullable Bundle bundle) {
updateUi();
}`
public void updateUi() {
try {
mlastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
if (mlastLocation != null) {
final double latitude = mlastLocation.getLatitude();
final double longitude = mlastLocation.getLongitude();
//using this cordinates you can initialize map
}
} catch (SecurityException e) {
e.printStackTrace();
}
}`