2015-12-18 6 views
5

मैंने यह क्यू & ए LocationSettingsRequest dialog - onActivityResult() skipped देखा है। यह एक ही मुद्दा नहीं है क्योंकि पहले से ही एक गतिविधि में सबकुछ किया जा रहा है।स्थान सेटिंग सेटिंग्स क्यों शुरू होती है ResolutionForResultActivityResult पर कॉल नहीं कर रहा है?

उपयोग किया गया कोड लगभग Google शब्द सेवा उदाहरणों में दिया गया है।

मेरे पास एक गतिविधि है, LocationActivity, जो उपयोगकर्ता के स्थान प्राप्त करने के लिए GoogleApiClient से कनेक्ट है। एक बार कनेक्ट होने पर मैं यह सुनिश्चित करने के लिए LocationSettingsRequest बना सकता हूं कि स्थान सेटिंग चालू है। गतिविधि ResultCallback<LocationSettingsResult> लागू कर रही है।

ResultCallback<LocationSettingsResult>.onResult() कहा जाता है और यदि result.getStatus().getStatusCode() == LocationSettingsStatusCodes.RESOLUTION_REQUIRED तो status.startResolutionForResult(this, REQUEST_CHECK_SETTINGS) कहा जाता है और संवाद दिखाया जाता है। समस्या, कोई फर्क नहीं पड़ता कि क्या चुना गया है, onActivityResult() कभी नहीं कहा जाता है।

@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 
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; 
    } 
} 

एक के रूप में:

@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; 
    } 
} 

मैं कभी यहां मिलता है। यह मेरे एस 3 पर कुछ बार काम किया। जब मैं कभी पूछना नहीं चाहता था तब से मैं यह कह सकता हूं कि यह काम करना बंद कर दिया। लेकिन, यह कभी भी एक एमुलेटर या टैब 10 पर काम नहीं करता है और यह अब मेरे एस 3 पर काम नहीं करता है।

+0

क्या आपने एक्टिविटी परिणाम पर उसी गतिविधि में घोषित किया है ?? –

उत्तर

7

ठीक है मैं मूर्खतापूर्ण महसूस करता हूं। मैनिफेस्ट में मेरी गतिविधि में noHistory="true" था, इसलिए जब दूसरी गतिविधि शुरू हुई तो वहां वापस आने के लिए कुछ भी नहीं था।

+0

वहां गया! मुझे महसूस करने में 14 दिन या उससे ज्यादा समय लगा। जब मैंने इसे समझ लिया, तो मैं दोनों राहत और क्रोधित था –

0

आप Google Play Location Sample देख सकते हैं क्योंकि आपका कोड काफी समान है।

जो मैं आपके नमूने पर बता सकता हूं, उस पर (जिसे) कहा जा सकता है क्योंकि मामला LocationSettingsStatusCodes.RESOLUTION_REQUIRED नहीं है। यह startResolutionForResult या अंतर्निहित setActivityForResult को इसके अंदर नहीं बुला रहा है।

+1

'onResult()' कहा जा रहा है और 'LocationSettingsStatusCodes.RESOLUTION_REQUIRED' केस हिट किया जा रहा है जो सेटिंग्स को चालू करने के लिए संवाद लाता है। इसके बाद यह है कि मेरे कोड को'ActivityResult() 'में कोई कॉलबैक नहीं मिलता है। –

0

मेरे मामले में यह त्रुटि थी: मैं

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

उपयोग किया है और

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

उपयोग करते हुए इस समारोह नहीं कहा क्योंकि जब मैं एक मुख्य गतिविधि के लिए इस्तेमाल किया

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

सुपर विधि नहीं कहा जाता है (इस स्ट्रिंग में मौजूद नहीं है):

super.onActivityResult(requestCode, resultCode, data); 
संबंधित मुद्दे