Tôi đã nhìn thấy điều này Q & A LocationSettingsRequest dialog - onActivityResult() skipped. Nó không phải là cùng một vấn đề bởi vì tất cả mọi thứ đang được thực hiện trong một hoạt động rồi.Tại sao LocationSettingsResult startResolutionForResult không gọi onActivityResult?
Mã được sử dụng gần như nguyên văn những gì được đưa ra trong ví dụ về Dịch vụ của Google Play.
Tôi có hoạt động, LocationActivity
, kết nối với GoogleApiClient để nhận vị trí của người dùng. Khi đã kết nối, tôi tạo một LocationSettingsRequest
để đảm bảo rằng cài đặt vị trí được bật. Hoạt động đang triển khai ResultCallback<LocationSettingsResult>
.
ResultCallback<LocationSettingsResult>.onResult()
được gọi và nếu result.getStatus().getStatusCode() == LocationSettingsStatusCodes.RESOLUTION_REQUIRED
thì status.startResolutionForResult(this, REQUEST_CHECK_SETTINGS)
được gọi và hộp thoại được hiển thị. Sự cố, bất kể nội dung nào được chọn, onActivityResult()
không bao giờ được gọi.
@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;
}
}
Tôi không bao giờ có được ở đây:
@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;
}
}
Là một sang một bên. Nó làm việc một vài lần trên S3 của tôi. Từ những gì tôi có thể nói nó ngừng hoạt động khi tôi chọn không bao giờ hỏi lại. Tuy nhiên, nó chưa bao giờ làm việc trên một trình giả lập hoặc Tab 10 và nó không còn hoạt động trên S3 của tôi nữa.
bạn đã khai báo kết quả onctctivity trong cùng hoạt động chưa ?? –