2015-12-18 12 views
5

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.

+0

bạn đã khai báo kết quả onctctivity trong cùng hoạt động chưa ?? –

Trả lời

7

Tôi cảm thấy ngớ ngẩn. Hoạt động của tôi có noHistory="true" trong Tệp kê khai để khi Hoạt động khác được bắt đầu thì không có gì để quay lại.

+0

Đã ở đó! Tôi mất 14 ngày để nhận ra. Khi tôi tìm ra điều này, tôi đã nhẹ nhõm và tức giận –

0

Bạn có thể xem Google Play Location Sample vì mã của bạn khá giống.

Từ những gì tôi có thể nói trên mẫu của bạn, onResult() có thể không được gọi vì trường hợp không phải là LocationSettingsStatusCodes.RESOLUTION_REQUIRED. Nó không gọi số startResolutionForResult hoặc bên dưới là setActivityForResult bên trong nó.

+1

'onResult()' đang được gọi và trường hợp 'LocationSettingsStatusCodes.RESOLUTION_REQUIRED' đang được nhấn để trả về hộp thoại để bật cài đặt. Đó là sau đó mã của tôi không nhận được bất kỳ gọi lại vào 'onActivityResult()'. –

0

Trong trường hợp của tôi có lỗi này: Tôi đã sử dụng

public abstract class AGoogleDriveBase extends ABase implements 
     GoogleApiClient.ConnectionCallbacks, 
     GoogleApiClient.OnConnectionFailedListener { 
//... 
@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
//... 

và chức năng này không được gọi là sử dụng

try { 
      result.startResolutionForResult(this, REQUEST_CODE_RESOLUTION); 
     } catch (SendIntentException e) { 
      Log.e(TAG, "Exception while starting resolution activity", e); 
     } 

bởi vì khi tôi đã sử dụng một hoạt động chính

public class myAct extends AGoogleDriveBase implements ... { 
//... 
@Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

phương thức siêu không được gọi (không tồn tại chuỗi này):

super.onActivityResult(requestCode, resultCode, data); 
Các vấn đề liên quan