Activity.RESULT_CANCELED (value == 0 )
всегда вызывается onActivityResult()
, даже когда в диалоговом окне местоположения нажимается OK
Я показываю диалог местоположения пользователю, если местоположение отключено в настройках устройства.
Используется следующий код -
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
builder.addLocationRequest(new LocationRequest().setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY));
builder.setAlwaysShow(true);
mLocationSettingsRequest = builder.build();
mSettingsClient = LocationServices.getSettingsClient(WifiList_Activity.this);
mSettingsClient
.checkLocationSettings(mLocationSettingsRequest)
.addOnSuccessListener(new OnSuccessListener<LocationSettingsResponse>() {
@Override
public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
//Success Perform Task Here
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
int statusCode = ((ApiException) e).getStatusCode();
switch (statusCode) {
case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
try {
ResolvableApiException rae = (ResolvableApiException) e;
rae. startResolutionForResult(WifiList_Activity.this, REQUEST_CHECK_SETTINGS);
} catch (IntentSender.SendIntentException sie) {
Logger.log("GPS Unable to execute request.");
}
break;
case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
Logger.log("GPS Location settings are inadequate, and cannot be fixed here. Fix in Settings.");
}
}
});
И код в onActivityResult()
, как показано ниже,
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CHECK_SETTINGS) {
switch (resultCode) {
case Activity.RESULT_CANCELED:
Logger.log("Result code in onACtivityresult CANCELED::"+resultCode);
Logger.log("GPS User denied to access location");
finish();
break;
case Activity.RESULT_OK:
//Success Perform Task Here
Logger.log("Result code in onACtivityresult OK::"+resultCode);
break;
}
}
Но проблема в том, что даже если пользователь нажимает OK в диалоговом окне Location, Acivity.RESULT_CANCELED
всегда вызывается, так как полученный resultCode равен 0.
Я настроил приложение на Android Q
,
compileSDKVersion "android-Q'
targetSDKVersion 'Q'
Кроме того, запуск приложения на Android Q beta на устройстве Pixel.
Ожидается - при нажатии OK диалогового окна местоположения resultCode -1 должен быть
возвращается в onActivityResult.
Actual - даже если нажата ok, resultCode 0 возвращается в
onActivityResult.