Pourquoi est-LocationSettingsResult startResolutionForResult ne pas appeler onActivityResult?

J'ai vu ce Q&Un LocationSettingsRequest de dialogue onActivityResult() sauté. Il n'est pas le même problème car tout est fait dans une Activité déjà.

Le code utilisé est presque mot pour mot ce qui est donné dans le Google Play Services des exemples.

J'ai une activité, LocationActivity, qui se connecte à GoogleApiClient pour obtenir l'emplacement de l'utilisateur. Une fois connecté, j'ai créer un LocationSettingsRequest à assurez-vous que les paramètres de localisation sont activés. L'activité est la mise en œuvre de ResultCallback<LocationSettingsResult>.

ResultCallback<LocationSettingsResult>.onResult() est appelée et si result.getStatus().getStatusCode() == LocationSettingsStatusCodes.RESOLUTION_REQUIRED puis status.startResolutionForResult(this, REQUEST_CHECK_SETTINGS) est appelé et la boîte de dialogue est affichée. Le problème, peu importe ce qui est sélectionné, onActivityResult() n'est jamais appelée.

@Override
public void onConnected(Bundle connectionHint) {
    Log.i(TAG, "GoogleApiClient connected");
    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
        .addLocationRequest(new LocationRequest().setPriority(LocationRequest.PRIORITY_LOW_POWER));

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

    result.setResultCallback(this);
}

.

@Override
public void onResult(LocationSettingsResult result) {
    final Status status = result.getStatus();
    Log.d(TAG, "onResult() called with: " + "result = [" + status.getStatusMessage() + "]");
    switch (status.getStatusCode()) {
        case LocationSettingsStatusCodes.SUCCESS:
            getLocation();
            break;
        case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
            //Location settings are not satisfied. But could be fixed by showing the user
            //a dialog.
            try {
                //Show the dialog by calling startResolutionForResult(),
                //and check the result in onActivityResult().
                status.startResolutionForResult(this, REQUEST_CHECK_SETTINGS);
            } catch (IntentSender.SendIntentException e) {
                Log.d(TAG, "", e);
                //Ignore the error.
            }
            break;
        case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
            showManualInputDialog();
            break;
    }
}

Je n'arrive jamais ici:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.d(TAG, "onActivityResult() called with: " + "requestCode = [" + requestCode + "], resultCode = [" + resultCode + "], data = [" + data + "]");
    switch (requestCode) {
        case REQUEST_CODE_RESOLUTION:
            retryConnecting();
            break;
        case REQUEST_CHECK_SETTINGS:
            if (resultCode == Activity.RESULT_OK) {
                getLocation();
            } else {
                showManualInputDialog();
            }
            break;
        default:
            super.onActivityResult(requestCode, resultCode, data);
            break;
    }
}

Que d'un côté. Il a travaillé quelques temps sur mon S3. À partir de ce que je peux dire il a cessé de travailler quand j'ai choisi de ne jamais demander à nouveau. Mais, il n'a jamais travaillé sur un émulateur ou un Onglet 10 et il ne fonctionne plus sur mon S3.

avez-vous déclaré onActivity résultat dans la même activité??

OriginalL'auteur Jeff Engebretsen | 2015-12-18