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.
OriginalL'auteur Jeff Engebretsen | 2015-12-18
Vous devez vous connecter pour publier un commentaire.
Bien je me sens bête. Mon Activité a
noHistory="true"
dans le Manifeste alors, quand l'autre l'Activité a débuté il n'y a rien à revenir.OriginalL'auteur Jeff Engebretsen
Si vous exécutez ce code dans le Fragment de ne pas utiliser startResolutionForResult(). Au lieu d'utiliser
startIntentSenderForResult(status.getResolution().getIntentSender(), REQUEST_CODE_LOCATION_SETTING, null, 0, 0, 0, null);
et overrider onaActivityResult() dans votre fragment.
Le résultat sera envoyé à cette méthode.
OriginalL'auteur Ghodasara Bhaumik
Vous pouvez consulter le Google Play Emplacement De L'Échantillon depuis votre code est assez similaire.
De ce que je peux dire sur vos échantillons, onResult() ne peut pas être appelé, car le cas n'est pas
LocationSettingsStatusCodes.RESOLUTION_REQUIRED
. Ses pas l'appel de lastartResolutionForResult
ou un sous-jacentsetActivityForResult
à l'intérieur.onResult()
est appelé et leLocationSettingsStatusCodes.RESOLUTION_REQUIRED
cas est d'être touché, ce qui ouvre la boîte de dialogue pour activer les paramètres. C'est après où mon code ne peut pas faire de rappel enonActivityResult()
.OriginalL'auteur adjuremods
Dans mon cas, il y a cette erreur:
J'ai utilisé
et cette fonction n'est pas appelée à l'aide de
parce que quand j'ai utilisé une activité principale
la super méthode n'est pas appelée (pas existé cette chaîne):
OriginalL'auteur Vyacheslav