GoogleApi क्लाइंट पर माइग्रेट करना

Google Play services SDK के 11.2.0 रिलीज़ में, Android के लिए Places SDK को ऐक्सेस करने का एक नया तरीका शामिल किया गया है. GoogleApi क्लाइंट, अपने पुराने वर्शन (GoogleApiClient) की तुलना में इस्तेमाल में आसान है, क्योंकि यह अपने-आप Google Play सेवाओं से कनेक्शन मैनेज करता है. इससे आपके ऐप्लिकेशन में बॉयलरप्लेट कोड की मात्रा कम हो जाती है और कई सामान्य गलतियां करने में मदद मिल सकती है. एपीआई के नए वर्शन में कई सुधार किए गए हैं:

  • कनेक्शन प्रोसेस अपने-आप मैनेज होती है. इसलिए, नए एपीआई को लागू करने में कम मेहनत करनी पड़ती है.
  • एपीआई कॉल, अब सेवा से कनेक्ट होने का अपने-आप इंतज़ार करते हैं. इसलिए, अनुरोध करने से पहले, onConnected का इंतज़ार करने की ज़रूरत नहीं होती.
  • Tasks API से एसिंक्रोनस ऑपरेशन लिखना आसान हो जाता है.
  • यह कोड पूरा होता है और इसे आसानी से शेयर की जाने वाली यूटिलिटी क्लास या ऐसे ही किसी दूसरे यूटिलिटी क्लास में आसानी से ले जाया जा सकता है.

GoogleApi क्लाइंट का इस्तेमाल करने के लिए, अपने ऐप्लिकेशन को अपडेट करने के लिए Android के लिए, जगह के SDK टूल में कुछ बदलाव करने होंगे. इस गाइड में Android के लिए, Places SDK टूल में हुए बदलावों के बारे में जानकारी दी गई है. साथ ही, नए क्लाइंट का इस्तेमाल करने के लिए, ऐप्लिकेशन को अपडेट करते समय उठाए जाने वाले कदमों के बारे में भी बताया गया है.

खास जानकारी

परिवर्तन के मुख्य क्षेत्र नीचे दिए गए हैं:

  • यहां दो नए एंट्री पॉइंट हैं: GeoDataClient और PlaceDetectionClient. सभी एपीआई को कवर करने के लिए, एक GoogleApiClient इंस्टेंस बनाने के बजाय, अब आपके ऐप्लिकेशन को GeoDataClient और PlaceDetectionClient, दोनों को इंस्टैंशिएट करना होगा.
  • अब कनेक्शन कॉलबैक की ज़रूरत नहीं है. इसलिए, इन्हें हटाने के लिए ऐप्लिकेशन को सुरक्षित तरीके से रीफ़ैक्टर किया जा सकता है.
  • Places API के नए तरीके अब एसिंक्रोनस हो गए हैं और PendingResult के बजाय Task दिखाते हैं.

Places API लोड करें

Places API लोड करने के लिए, एंट्री पॉइंट का एलान करें, फिर अपने फ़्रैगमेंट या गतिविधि के onCreate() तरीके में क्लाइंट को इंस्टैंशिएट करें, जैसा कि यहां दिए गए उदाहरण में दिखाया गया है:

// The entry points to the Places API.
private GeoDataClient mGeoDataClient;
private PlaceDetectionClient mPlaceDetectionClient;

...
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Construct a GeoDataClient.
    mGeoDataClient = Places.getGeoDataClient(this, null);

    // Construct a PlaceDetectionClient.
    mPlaceDetectionClient = Places.getPlaceDetectionClient(this, null);

तुलना के विकल्प

Places API के नए तरीके अब एसिंक्रोनस हो गए हैं और PendingResult के बजाय Task दिखाते हैं. डेटा के स्ट्रक्चर में कोई बदलाव नहीं हुआ है. इसलिए, नतीजों को हैंडल करने के लिए, आपके मौजूदा कोड को अपडेट करने की ज़रूरत नहीं होगी. नीचे दिए गए कोड के उदाहरण, GetCurrentPlace() के नए और पुराने वर्शन की तुलना करते हैं:

नया तरीका

Task<PlaceLikelihoodBufferResponse> placeResult = mPlaceDetectionClient.getCurrentPlace(null);
placeResult.addOnCompleteListener(new OnCompleteListener<PlaceLikelihoodBufferResponse>() {
    @Override
    public void onComplete(@NonNull Task<PlaceLikelihoodBufferResponse> task) {
        PlaceLikelihoodBufferResponse likelyPlaces = task.getResult();
        for (PlaceLikelihood placeLikelihood : likelyPlaces) {
            Log.i(TAG, String.format("Place '%s' has likelihood: %g",
                placeLikelihood.getPlace().getName(),
                placeLikelihood.getLikelihood()));
        }
        likelyPlaces.release();
    }
});

पुराना तरीका

PendingResult<PlaceLikelihoodBuffer> result = Places.PlaceDetectionApi
    .getCurrentPlace(mGoogleApiClient, null);
result.setResultCallback(new ResultCallback<PlaceLikelihoodBuffer>() {
  @Override
  public void onResult(PlaceLikelihoodBuffer likelyPlaces) {
    for (PlaceLikelihood placeLikelihood : likelyPlaces) {
      Log.i(TAG, String.format("Place '%s' has likelihood: %g",
          placeLikelihood.getPlace().getName(),
          placeLikelihood.getLikelihood()));
    }
    likelyPlaces.release();
  }
});

ज़्यादा जानें

Google API को ऐक्सेस करने के बारे में ज़्यादा जानें.