Android FusedLocationProviderClient getLocationAvailability需要延迟才能给出正确的结果

Android FusedLocationProviderClient getLocationAvailability需要延迟才能给出正确的结果,android,gps,location,availability,Android,Gps,Location,Availability,我试图首先获取最后一个位置检查,如果GPS已启用,我会要求用户转到“设置”以启用它(如果未启用),当我从“设置”返回到我的应用程序时,在启用GPS位置后,我检查GPS是否可用,我得到它未启用,经过一段延迟(1-2秒)后,我得到它 fusedLocationProviderClient.getLocationAvailability()方法中为什么会出现这种延迟?我怎样才能解决它? 代码如下: @Inject FusedLocationProviderClient fusedLocationPro

我试图首先获取最后一个位置检查,如果GPS已启用,我会要求用户转到“设置”以启用它(如果未启用),当我从“设置”返回到我的应用程序时,在启用GPS位置后,我检查GPS是否可用,我得到它未启用,经过一段延迟(1-2秒)后,我得到它

fusedLocationProviderClient.getLocationAvailability()方法中为什么会出现这种延迟?我怎样才能解决它? 代码如下:

@Inject
FusedLocationProviderClient fusedLocationProviderClient;

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    checkAndGetLastLocation();
}


@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == GPS_ENABLE_REQUEST) {
        checkAndGetLastLocation();
    } else {
        super.onActivityResult(requestCode, resultCode, data);
    }
}

@SuppressWarnings("MissingPermission")
private void checkAndGetLastLocation() {
    fusedLocationProviderClient.getLocationAvailability().addOnCompleteListener(getActivity(), availabilityListener -> {
        if (availabilityListener.isSuccessful() && availabilityListener.getResult() != null && availabilityListener.getResult().isLocationAvailable()) {
            showProgress();
            getLastLocation();
        } else {
            showGPSDisabledDialog();
        }
    });
}

public void showGPSDisabledDialog() {
    hideProgress();

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setTitle(R.string.gps_disabled_title);
    builder.setMessage(R.string.gps_disabled_message);
    builder.setPositiveButton(R.string.enable_gps, (dialog, which) -> {
        dialog.dismiss();
        startActivityForResult(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS), GPS_ENABLE_REQUEST);
    }).setNegativeButton(R.string.not_enable_gps, (dialog, which) -> {
        switchToManualMode();
    });
    AlertDialog mGPSDialog = builder.create();
    mGPSDialog.setCancelable(false);
    mGPSDialog.show();
}

@SuppressWarnings("MissingPermission")
private void getLastLocation() {
    locationListLayout.setVisibility(View.VISIBLE);
    addLocationButton.setVisibility(View.VISIBLE);
    addLocationListLayout.setVisibility(View.GONE);
    searchLocationsButton.setVisibility(View.GONE);

    fusedLocationProviderClient.getLastLocation()
            .addOnCompleteListener(getActivity(), locationListener -> {
                if (locationListener.isSuccessful() && locationListener.getResult() != null) {
                    Location lastLocation = locationListener.getResult();
                    locationStep1Presenter.getSites(lastLocation);
                } else {
                    Log.d(this.getTag(), "checkAndGetLastLocation:exception", locationListener.getException());
                    hideProgress();
                    showNoSitesToShowError();
                }
            });
}

我认为我们遇到了相同的问题,但是在getLastLocation()回调上,因为我们没有首先检查getLocationAvailability()。getLastLocation()返回一个旧的(我们应该说是缓存的)位置,而不是当前位置。再次调用此方法后,我们是否实际收到更新的位置。我相信这可能是由于API在后台使用GoogleAPI客户端,并且在获取实际位置之前必须首先异步连接到它。但我不知道这是一个bug还是预期的行为。。。