现在获取当前位置,而不是更新

Getting current Location now, not on update

我正在构建一个需要您的当前位置才能初始化和显示地图的应用程序。我正在使用 LocationManager.requestLocationUpdates(...) 请求位置更新,但这似乎只在位置更改时(例如我移动 10 英尺)才给我数据。我也在尝试使用 getLastKnownLocation,但在一些不常见的情况下(比如打开 GPS 并且没有移动打开应用程序)这将 return 对于我正在使用的所有提供者为 null。

每当 getLastKnownLocation return 为 null 时,我的应用程序无法初始化,直到我移动 10 英尺并收到位置更新。到目前为止,我还没有找到一种方法来立即轮询我的位置,也没有发现任何暗示当我 requestLocationUpdates(...) 我可以在我订阅的那一刻获得我的第一个数据,而不是等待指定的时间句号或移动指定距离。

一种方法是 requestLocationUpdates(...) 在一个非常小的时间间隔或 0 时间间隔内,让它向我发送我当前的位置,删除 LocationListener 并再次 requestLocationUpdates(...) 但这次使用更大的我用来避免耗尽电池的值。

我正在寻找更好的方法来解决这个问题。可能类似于 getCurrentLocation(),但实际上任何有用的东西。

嗯,我认为你只使用 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();
        }
    }`

I am requesting location updates with LocationManager.requestLocationUpdates(...), but this only appears to give me data when the location changes (for example I move 10 feet).

它会在确定位置后立即为您提供第一个位置更新——无论您是否在移动。继续收听更多更新一段时间并不是一个坏主意,因为第一个更新可能不太准确。

I'm looking for a better way to solve this. Probably something like getCurrentLocation(), but really anything that works.

如果您不想接收连续更新,那么 LocationManager.requestSingleUpdate() 变体之一呢?

这些只会在 onLocationChanged() 回调(或通过 Intent)中为您提供一个位置更新,仅此而已。无需取消任何听众等。调用可能类似于:

locationManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, this, Looper.getMainLooper());