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

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

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

GoogleApi क्लाइंट का इस्तेमाल करने के लिए, अपने ऐप्लिकेशन को अपडेट करने के लिए, Android पर Places 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 को ऐक्सेस करने के बारे में ज़्यादा जानें.