Caixa de diálogo LocationSettingsRequest para ativar o GPS - onActivityResult () ignorado

Parte do meu aplicativo requer serviços de localização; portanto, se o local estiver desativado no momento, o aplicativo solicitará que o usuário o ative.Aqui é assim que eu estou fazendo: (Também visto emesta Resposta do Stack Overflow)

LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
            .addLocationRequest(mLocationRequest);
builder.setAlwaysShow(true);

PendingResult<LocationSettingsResult> result = LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, builder.build());

result.setResultCallback(new ResultCallback<LocationSettingsResult>() 
{
     @Override
     public void onResult(LocationSettingsResult result) 
     {
         final Status status = result.getStatus();
         final LocationSettingsStates = result.getLocationSettingsStates();
         switch (status.getStatusCode()) 
         {
             case LocationSettingsStatusCodes.SUCCESS:
                 // All location settings are satisfied. The client can initialize location
                 // requests here.
                 ...
                 Log.d("onResult", "SUCCESS");
                 break;
             case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                 // Location settings are not satisfied. But could be fixed by showing the user
                 // a dialog.
                 Log.d("onResult", "RESOLUTION_REQUIRED");
                 try 
                 {
                     // Show the dialog by calling startResolutionForResult(),
                     // and check the result in onActivityResult().
                     status.startResolutionForResult(OuterClass.this, REQUEST_LOCATION);
                 } 
                 catch (SendIntentException e) 
                 {
                     // Ignore the error.
                 }
                 break;
             case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                 // Location settings are not satisfied. However, we have no way to fix the
                 // settings so we won't show the dialog.
                 ...
                 Log.d("onResult", "UNAVAILABLE");
                 break;
         }
     }
 });

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
    // This log is never called
    Log.d("onActivityResult()", Integer.toString(resultCode));

    final LocationSettingsStates states = LocationSettingsStates.fromIntent(data);
    switch (requestCode)
    {
        case REQUEST_LOCATION:
            switch (resultCode)
            {
                case Activity.RESULT_OK:
                {
                    // All required changes were successfully made
                    break;
                }
                case Activity.RESULT_CANCELED:
                {
                    // The user was asked to change settings, but chose not to
                    break;
                }
                default:
                {      
                    break;
                }
            }
    ,        break;
    }
}

Esse código funciona bem, no entanto,onActivityResult() é sempre ignorado. Se o usuário pressiona ou nãoYes, Noouback deDialog, onActivityResult() não corre.

Preciso que o Android ligueonActivityResult() portanto, se o usuário optar por não ativar os serviços de localização, eu posso lidar com isso adequadamente.

A página do desenvolvedor do Google (e o código acima) diz explicitamente queonActivityResult() deve ser chamado. Alguém sabe por que está sendo ignorado?

Também não sei qual é o objetivo desta linha:

final LocationSettingsStates states = LocationSettingsStates.fromIntent(data);

Obrigado!

Editar: informações básicas sobre a estrutura do meu aplicativo:

Este código está contido noonResume() método deFragment que implementaGoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListenereLocationListener para receber atualizações de local. Exemplo vistoaqui.NoonLocationChanged() aFragment terá um costumeView ligarinvalidate() e redesenhar-se com informações atualizadas.

questionAnswers(7)

yourAnswerToTheQuestion