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