नए स्थान SDK क्लाइंट पर माइग्रेट करना

इस गाइड में, Places के साथ काम करने वाली लाइब्रेरी और Android के लिए Places SDK टूल के नए स्टैंडअलोन वर्शन के बीच हुए बदलावों के बारे में बताया गया है. अगर आपने Places SDK for Android के नए स्टैंडअलोन वर्शन पर माइग्रेट करने के बजाय, Places की काम करने की सुविधा वाली लाइब्रेरी का इस्तेमाल किया है, तो इस गाइड में आपको अपने प्रोजेक्ट को अपडेट करने का तरीका बताया गया है, ताकि आप Places SDK for Android के नए वर्शन का इस्तेमाल कर सकें.

Places SDK for Android के 2.6.0 से पहले के वर्शन में मौजूद सुविधाओं और गड़बड़ियों को ठीक करने के तरीकों को ऐक्सेस करने का एकमात्र तरीका, Places SDK for Android का इस्तेमाल करना है. Google का सुझाव है कि आप Android के लिए, काम करने वाली लाइब्रेरी से, Places SDK टूल के नए वर्शन पर जल्द से जल्द अपडेट करें.

क्या बदल गया है?

बदलावों के मुख्य हिस्से ये हैं:

  • Android के लिए Places SDK टूल का नया वर्शन, स्टैटिक क्लाइंट लाइब्रेरी के तौर पर उपलब्ध कराया जाता है. जनवरी 2019 से पहले, Android के लिए Places SDK टूल, Google Play services के ज़रिए उपलब्ध कराया गया था. तब से, Android के लिए Places SDK के नए वर्शन पर आसानी से स्विच करने के लिए, Places के साथ काम करने वाली लाइब्रेरी उपलब्ध कराई गई है.
  • इसमें पूरी तरह से नए तरीके हैं.
  • फ़ील्ड मास्क, अब उन तरीकों के लिए काम करते हैं जो जगह की जानकारी दिखाते हैं. फ़ील्ड मास्क का इस्तेमाल करके, यह तय किया जा सकता है कि किस तरह की जगह का डेटा दिखाना है.
  • गड़बड़ियों की शिकायत करने के लिए इस्तेमाल किए जाने वाले स्टेटस कोड को बेहतर बनाया गया है.
  • ऑटोकंप्लीट की सुविधा अब सेशन टोकन के साथ काम करती है.
  • जगह चुनने वाला टूल अब उपलब्ध नहीं है.

जगहों की जानकारी वाली लाइब्रेरी के साथ काम करने के बारे में जानकारी

जनवरी 2019 में, Android के लिए Places SDK टूल के स्टैंडअलोन वर्शन 1.0 के रिलीज़ होने के साथ ही, Google ने एक कम्पैटिबिलिटी लाइब्रेरी उपलब्ध कराई थी. इससे, Android के लिए Places SDK टूल (com.google.android.gms:play-services-places) के Google Play Services के वर्शन से माइग्रेट करने में मदद मिलती है.

यह कम्पैटिबिलिटी लाइब्रेरी, Google Play Services के वर्शन के ज़रिए किए जाने वाले एपीआई कॉल को नए स्टैंडअलोन वर्शन पर रीडायरेक्ट और ट्रांसलेट करने के लिए, कुछ समय के लिए उपलब्ध कराई गई थी. ऐसा तब तक किया गया, जब तक डेवलपर अपने कोड को माइग्रेट करके, स्टैंडअलोन SDK टूल में नए नामों का इस्तेमाल नहीं कर पाए. Android के लिए Places SDK टूल के 1.0 से 2.6.0 तक के हर वर्शन के लिए, Places की काम करने की सुविधा वाली लाइब्रेरी का एक वर्शन रिलीज़ किया गया है. इससे, इन वर्शन के साथ काम करने की सुविधा मिलती है.

Places की काम करने की सुविधा वाली लाइब्रेरी को फ़्रीज़ करना और उसे बंद करना

Android के लिए Places SDK टूल की, काम करने की सुविधा वाली लाइब्रेरी के सभी वर्शन 31 मार्च, 2 2022 से काम नहीं करेंगे. Places की लाइब्रेरी के साथ काम करने वाली लाइब्रेरी का आखिरी वर्शन 2.6.0 है. Places SDK for Android के 2.6.0 से पहले के वर्शन में मौजूद सुविधाओं और गड़बड़ियों को ठीक करने के तरीकों को ऐक्सेस करने का एक ही तरीका है. इसके लिए, आपको Places SDK for Android का इस्तेमाल करना होगा.

Google का सुझाव है कि आप Android के लिए Places SDK टूल पर माइग्रेट करें, ताकि 2.6.0 के बाद के वर्शन के लिए नई सुविधाओं और गड़बड़ियों को ठीक करने की सुविधाओं का ऐक्सेस पाया जा सके. अगर फ़िलहाल, काम करने की सुविधा वाली लाइब्रेरी का इस्तेमाल किया जा रहा है, तो Android के लिए Places SDK टूल पर माइग्रेट करने के लिए, Android के लिए Places SDK टूल इंस्टॉल करें सेक्शन में दिया गया तरीका अपनाएं.

क्लाइंट लाइब्रेरी इंस्टॉल करना

Android के लिए Places SDK टूल का नया वर्शन, स्टैटिक क्लाइंट लाइब्रेरी के तौर पर उपलब्ध है.

अपने Android Studio प्रोजेक्ट में, Android के लिए Places SDK टूल जोड़ने के लिए, Maven का इस्तेमाल करें:

  1. अगर फ़िलहाल Places की काम करने की लाइब्रेरी का इस्तेमाल किया जा रहा है, तो:

    1. dependencies सेक्शन में, इस लाइन को बदलें:

          implementation 'com.google.android.libraries.places:places-compat:X.Y.Z'

      Android के लिए Places SDK टूल पर स्विच करने के लिए, इस लाइन का इस्तेमाल करें:

          implementation 'com.google.android.libraries.places:places:3.3.0'

  2. अगर फ़िलहाल Android के लिए Places SDK टूल के Play Services वर्शन का इस्तेमाल किया जा रहा है, तो:

    1. dependencies सेक्शन में, इस लाइन को बदलें:

          implementation 'com.google.android.gms:play-services-places:X.Y.Z'

      Android के लिए Places SDK टूल पर स्विच करने के लिए, इस लाइन का इस्तेमाल करें:

          implementation 'com.google.android.libraries.places:places:3.3.0'

  3. अपना Gradle प्रोजेक्ट सिंक करें.

  4. अपने ऐप्लिकेशन प्रोजेक्ट के लिए minSdkVersion को 16 या उससे ज़्यादा पर सेट करें.

  5. "Google की मदद से" वाली एसेट अपडेट करें:

    @drawable/powered_by_google_light // OLD
    @drawable/places_powered_by_google_light // NEW
    @drawable/powered_by_google_dark // OLD
    @drawable/places_powered_by_google_dark // NEW
  6. अपना ऐप्लिकेशन बनाएं. अगर Android के लिए Places SDK पर स्विच करने की वजह से, आपको ऐप्लिकेशन बनाने में कोई गड़बड़ी दिखती है, तो इन गड़बड़ियों को ठीक करने के बारे में जानने के लिए नीचे दिए गए सेक्शन देखें.

Places SDK टूल के नए क्लाइंट को शुरू करना

नए Places SDK क्लाइंट को इस उदाहरण में दिखाए गए तरीके से शुरू करें:

// Add an import statement for the client library.
import com.google.android.libraries.places.api.Places;

...

// Initialize Places.
Places.initialize(getApplicationContext(), apiKey);

// Create a new Places client instance.
PlacesClient placesClient = Places.createClient(this);

स्टेटस कोड

क्यूपीएस की सीमा से जुड़ी गड़बड़ियों का स्टेटस कोड बदल गया है. अब क्यूपीएस की सीमा से जुड़ी गड़बड़ियां, PlaceStatusCodes.OVER_QUERY_LIMIT के ज़रिए दिखाई जाती हैं. अब क्यूपीडी की कोई सीमा नहीं है.

यहां दिए गए स्टेटस कोड जोड़े गए हैं:

  • REQUEST_DENIED — अनुरोध अस्वीकार कर दिया गया. ऐसा इन वजहों से हो सकता है:

    • कोई एपीआई पासकोड नहीं दिया गया था.
    • अमान्य एपीआई पासकोड दिया गया था.
    • Cloud Console में Places API चालू नहीं किया गया है.
    • एपीआई पासकोड के साथ गलत पाबंदियां दी गई हैं.
  • INVALID_REQUEST — आर्ग्युमेंट मौजूद न होने या अमान्य होने की वजह से अनुरोध अमान्य है.

  • NOT_FOUND — दिए गए अनुरोध के लिए कोई नतीजा नहीं मिला.

नए तरीके

Android के लिए Places SDK टूल के नए वर्शन में, नए तरीके इस्तेमाल किए गए हैं. इन्हें एक जैसा रखने के लिए डिज़ाइन किया गया है. सभी नए तरीके, इनके मुताबिक होते हैं:

  • एंडपॉइंट अब get क्रिया का इस्तेमाल नहीं करते.
  • रिक्वेस्ट और रिस्पॉन्स ऑब्जेक्ट का नाम, क्लाइंट के उस तरीके के नाम जैसा होता है जिसका इस्तेमाल करके उन्हें बनाया गया है.
  • अनुरोध ऑब्जेक्ट में अब बिल्डर हैं; ज़रूरी पैरामीटर, अनुरोध बिल्डर पैरामीटर के तौर पर पास किए जाते हैं.
  • अब बफ़र का इस्तेमाल नहीं किया जाता.

इस सेक्शन में, नए तरीके के बारे में बताया गया है. साथ ही, यह भी बताया गया है कि ये तरीके कैसे काम करते हैं.

आईडी के हिसाब से कोई जगह फ़ेच करना

किसी खास जगह के बारे में जानकारी पाने के लिए, fetchPlace() का इस्तेमाल करें. fetchPlace(), getPlaceById() की तरह ही काम करता है.

किसी जगह की जानकारी पाने के लिए, यह तरीका अपनाएं:

  1. fetchPlace() को कॉल करें. इसके लिए, FetchPlaceRequest ऑब्जेक्ट को पास करें, जिसमें जगह का आईडी और फ़ील्ड की सूची हो. इस सूची से पता चलता है कि जगह का कौनसा डेटा दिखाना है.

    // Define a Place ID.
    String placeId = "INSERT_PLACE_ID_HERE";
    
    // Specify the fields to return.
    List<Place.Field> placeFields = Arrays.asList(Place.Field.ID, Place.Field.DISPLAY_NAME);
    
    // Construct a request object, passing the place ID and fields array.
    FetchPlaceRequest request = FetchPlaceRequest.builder(placeId, placeFields)
            .build();
    
    
  2. FetchPlaceResponse को मैनेज करने के लिए, addOnSuccessListener() को कॉल करें. एक Place नतीजा दिखाया जाता है.

    // Add a listener to handle the response.
    placesClient.fetchPlace(request).addOnSuccessListener((response) -> {
      Place place = response.getPlace();
      Log.i(TAG, "Place found: " + place.getName());
    }).addOnFailureListener((exception) -> {
        if (exception instanceof ApiException) {
            ApiException apiException = (ApiException) exception;
            int statusCode = apiException.getStatusCode();
            // Handle error with given status code.
            Log.e(TAG, "Place not found: " + exception.getMessage());
        }
    });
    

किसी जगह की फ़ोटो फ़ेच करना

किसी जगह की फ़ोटो पाने के लिए, fetchPhoto() का इस्तेमाल करें. fetchPhoto() किसी जगह की फ़ोटो दिखाता है. फ़ोटो का अनुरोध करने का पैटर्न आसान बना दिया गया है. अब Place ऑब्जेक्ट से सीधे PhotoMetadata का अनुरोध किया जा सकता है. इसके लिए, अलग से अनुरोध करने की ज़रूरत नहीं है. फ़ोटो की चौड़ाई या ऊंचाई ज़्यादा से ज़्यादा 1600 पिक्सल हो सकती है. fetchPhoto(), getPhoto() की तरह ही काम करता है.

किसी जगह की फ़ोटो फ़ेच करने के लिए, यह तरीका अपनाएं:

  1. fetchPlace() पर कॉल सेट अप करें. अपने अनुरोध में PHOTO_METADATAS फ़ील्ड ज़रूर शामिल करें:

    List<Place.Field> fields = Arrays.asList(Place.Field.PHOTO_METADATAS);
    
  2. जगह का ऑब्जेक्ट पाएं (इस उदाहरण में fetchPlace() का इस्तेमाल किया गया है, लेकिन findCurrentPlace() का भी इस्तेमाल किया जा सकता है):

    FetchPlaceRequest placeRequest = FetchPlaceRequest.builder(placeId, fields).build();
    
  3. FetchPlaceResponse में मौजूद Place से फ़ोटो का मेटाडेटा पाने के लिए, OnSuccessListener जोड़ें. इसके बाद, फ़ोटो के मेटाडेटा का इस्तेमाल करके बिटमैप और एट्रिब्यूशन टेक्स्ट पाएं:

    placesClient.fetchPlace(placeRequest).addOnSuccessListener((response) -> {
        Place place = response.getPlace();
    
        // Get the photo metadata.
        PhotoMetadata photoMetadata = place.getPhotoMetadatas().get(0);
    
        // Get the attribution text.
        String attributions = photoMetadata.getAttributions();
    
        // Create a FetchPhotoRequest.
        FetchPhotoRequest photoRequest = FetchPhotoRequest.builder(photoMetadata)
                .setMaxWidth(500) // Optional.
                .setMaxHeight(300) // Optional.
                .build();
        placesClient.fetchPhoto(photoRequest).addOnSuccessListener((fetchPhotoResponse) -> {
            Bitmap bitmap = fetchPhotoResponse.getBitmap();
            imageView.setImageBitmap(bitmap);
        }).addOnFailureListener((exception) -> {
            if (exception instanceof ApiException) {
                ApiException apiException = (ApiException) exception;
                int statusCode = apiException.getStatusCode();
                // Handle error with given status code.
                Log.e(TAG, "Place not found: " + exception.getMessage());
            }
        });
    });
    

उपयोगकर्ता की जगह की जानकारी के हिसाब से कोई जगह ढूंढना

उपयोगकर्ता के डिवाइस की मौजूदा जगह की जानकारी पाने के लिए, findCurrentPlace() का इस्तेमाल करें. findCurrentPlace() PlaceLikelihood की एक सूची दिखाता है. इससे उन जगहों के बारे में पता चलता है जहां उपयोगकर्ता का डिवाइस सबसे ज़्यादा मौजूद हो सकता है. findCurrentPlace(), getCurrentPlace() की तरह ही काम करता है.

उपयोगकर्ता के डिवाइस की मौजूदा जगह की जानकारी पाने के लिए, यह तरीका अपनाएं:

  1. पक्का करें कि आपका ऐप्लिकेशन, ACCESS_FINE_LOCATION और ACCESS_WIFI_STATE अनुमतियों का अनुरोध करता हो. उपयोगकर्ता को अपने डिवाइस की मौजूदा जगह की जानकारी ऐक्सेस करने की अनुमति देनी होगी. ज़्यादा जानकारी के लिए, ऐप्लिकेशन से अनुमतियां पाने का अनुरोध करना लेख पढ़ें.

  2. FindCurrentPlaceRequest बनाएं. इसमें, जगह के डेटा टाइप की सूची शामिल करें, ताकि उन्हें दिखाया जा सके.

      // Use fields to define the data types to return.
      List<Place.Field> placeFields = Arrays.asList(Place.Field.DISPLAY_NAME);
    
      // Use the builder to create a FindCurrentPlaceRequest.
      FindCurrentPlaceRequest request =
              FindCurrentPlaceRequest.builder(placeFields).build();
    
  3. findCurrentPlace को कॉल करें और रिस्पॉन्स को मैनेज करें. इसके लिए, पहले यह पुष्टि करें कि उपयोगकर्ता ने अपने डिवाइस की जगह की जानकारी का इस्तेमाल करने की अनुमति दी है या नहीं.

      // Call findCurrentPlace and handle the response (first check that the user has granted permission).
      if (ContextCompat.checkSelfPermission(this, ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
          placesClient.findCurrentPlace(request).addOnSuccessListener(((response) -> {
              for (PlaceLikelihood placeLikelihood : response.getPlaceLikelihoods()) {
                  Log.i(TAG, String.format("Place '%s' has likelihood: %f",
                          placeLikelihood.getPlace().getName(),
                          placeLikelihood.getLikelihood()));
                  textView.append(String.format("Place '%s' has likelihood: %f\n",
                          placeLikelihood.getPlace().getName(),
                          placeLikelihood.getLikelihood()));
              }
          })).addOnFailureListener((exception) -> {
              if (exception instanceof ApiException) {
                  ApiException apiException = (ApiException) exception;
                  Log.e(TAG, "Place not found: " + apiException.getStatusCode());
              }
          });
      } else {
          // A local method to request required permissions;
          // See https://developer.android.com/training/permissions/requesting
          getLocationPermission();
      }
    

अपने-आप पूरा होने वाले सुझाव देखना

उपयोगकर्ता की खोज क्वेरी के जवाब में, जगह के सुझाव दिखाने के लिए findAutocompletePredictions() का इस्तेमाल करें. findAutocompletePredictions(), getAutocompletePredictions() की तरह ही काम करता है.

यहां दिए गए उदाहरण में, findAutocompletePredictions() को कॉल करने का तरीका बताया गया है:

// Create a new token for the autocomplete session. Pass this to FindAutocompletePredictionsRequest,
// and once again when the user makes a selection (for example when calling fetchPlace()).
AutocompleteSessionToken token = AutocompleteSessionToken.newInstance();
// Create a RectangularBounds object.
RectangularBounds bounds = RectangularBounds.newInstance(
  new LatLng(-33.880490, 151.184363),
  new LatLng(-33.858754, 151.229596));
// Use the builder to create a FindAutocompletePredictionsRequest.
FindAutocompletePredictionsRequest request = FindAutocompletePredictionsRequest.builder()
// Call either setLocationBias() OR setLocationRestriction().
   .setLocationBias(bounds)
   //.setLocationRestriction(bounds)
   .setCountry("au")
   .setTypesFilter(Arrays.asList(PlaceTypes.ADDRESS))
   .setSessionToken(token)
   .setQuery(query)
   .build();

placesClient.findAutocompletePredictions(request).addOnSuccessListener((response) -> {
   for (AutocompletePrediction prediction : response.getAutocompletePredictions()) {
       Log.i(TAG, prediction.getPlaceId());
       Log.i(TAG, prediction.getPrimaryText(null).toString());
   }
}).addOnFailureListener((exception) -> {
   if (exception instanceof ApiException) {
       ApiException apiException = (ApiException) exception;
       Log.e(TAG, "Place not found: " + apiException.getStatusCode());
   }
});

सेशन टोकन

सेशन टोकन, उपयोगकर्ता की खोज के क्वेरी और चुनने के चरणों को बिलिंग के मकसद से अलग-अलग सेशन में ग्रुप करते हैं. हमारा सुझाव है कि ऑटोमैटिक भरने की सुविधा वाले सभी सेशन के लिए, सेशन टोकन का इस्तेमाल करें. सेशन तब शुरू होता है, जब उपयोगकर्ता कोई क्वेरी टाइप करना शुरू करता है और तब खत्म होता है, जब वह कोई जगह चुनता है. हर सेशन में कई क्वेरी हो सकती हैं. इसके बाद, एक जगह चुनी जा सकती है. किसी सेशन के खत्म होने के बाद, टोकन अमान्य हो जाता है. इसलिए, आपके ऐप्लिकेशन को हर सेशन के लिए नया टोकन जनरेट करना होगा.

फ़ील्ड मास्क

जगह की जानकारी दिखाने वाले तरीकों में, आपको यह बताना होगा कि हर अनुरोध के साथ, जगह का किस तरह का डेटा दिखाना है. इससे यह पक्का करने में मदद मिलती है कि आपने सिर्फ़ उस डेटा का अनुरोध किया है (और उसका पेमेंट किया है) जिसका इस्तेमाल आपको करना है.

यह तय करने के लिए कि कौनसे डेटा टाइप दिखाने हैं, अपने FetchPlaceRequest में Place.Fields का कलेक्शन पास करें, जैसा कि इस उदाहरण में दिखाया गया है:

// Include address, ID, and phone number.
List<Place.Field> placeFields = Arrays.asList(Place.Field.FORMATTED_ADDRESS,
                                              Place.Field.ID,
                                              Place.Field.INTERNATIONAL_PHONE_NUMBER);

फ़ील्ड मास्क में इस्तेमाल किए जा सकने वाले फ़ील्ड की सूची के लिए, डेटा फ़ील्ड डालें (नया) देखें.

जगहों के डेटा के एसकेयू के बारे में ज़्यादा पढ़ें.

जगह चुनने की सुविधा और अपने-आप पूरा होने वाली टेक्स्ट की सुविधा से जुड़े अपडेट

इस सेक्शन में, जगहों के विजेट (जगह चुनने वाला टूल और ऑटोमैटिक तरीके से पूरा होने वाला टेक्स्ट) में हुए बदलावों के बारे में बताया गया है.

प्रोग्रामैटिक ऑटोकंप्लीट

autocomplete में ये बदलाव किए गए हैं:

  • PlaceAutocomplete का नाम बदलकर Autocomplete कर दिया गया है.
    • PlaceAutocomplete.getPlace का नाम बदलकर Autocomplete.getPlaceFromIntent कर दिया गया है.
    • PlaceAutocomplete.getStatus का नाम बदलकर Autocomplete.getStatusFromIntent कर दिया गया है.
  • PlaceAutocomplete.RESULT_ERROR का नाम बदलकर AutocompleteActivity.RESULT_ERROR कर दिया गया है (ऑटोमैटिक भरने वाले फ़्रैगमेंट के लिए गड़बड़ी को मैनेज करने की सुविधा में कोई बदलाव नहीं हुआ है).

जगह चुनने वाला टूल

जगह चुनने की सुविधा को 29 जनवरी, 2019 को बंद कर दिया गया था. इसे 29 जुलाई, 2019 को बंद कर दिया गया था और अब यह उपलब्ध नहीं है. इसका इस्तेमाल जारी रखने पर, आपको गड़बड़ी का मैसेज दिखेगा. नया SDK, जगह चुनने की सुविधा के साथ काम नहीं करता.

अपने-आप जानकारी भरने वाले विजेट

अपने-आप पूरा होने वाले टेक्स्ट की सुविधा वाले विजेट अपडेट किए गए हैं:

  • सभी क्लास से Place प्रीफ़िक्स हटा दिया गया है.
  • सेशन टोकन के लिए सहायता जोड़ी गई. विजेट, बैकग्राउंड में आपके लिए टोकन को अपने-आप मैनेज करता है.
  • फ़ील्ड मास्क के लिए सहायता जोड़ी गई है. इससे, यह चुना जा सकता है कि उपयोगकर्ता के किसी विकल्प को चुनने के बाद, किस तरह का जगह का डेटा दिखाया जाए.

यहां दिए गए सेक्शन में, अपने प्रोजेक्ट में ऑटोकंप्लीट विजेट जोड़ने का तरीका बताया गया है.

AutocompleteFragment जोड़ना

अपने-आप पूरा होने वाला फ़्रैगमेंट जोड़ने के लिए, यह तरीका अपनाएं:

  1. अपनी गतिविधि के एक्सएमएल लेआउट में फ़्रैगमेंट जोड़ें, जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है.

    <fragment
      android:id="@+id/autocomplete_fragment"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:name=
    "com.google.android.libraries.places.widget.AutocompleteSupportFragment"
      />
    
  2. गतिविधि में ऑटोमैटिक भरने की सुविधा वाला विजेट जोड़ने के लिए, यह तरीका अपनाएं:

    • ऐप्लिकेशन कॉन्टेक्स्ट और अपनी एपीआई कुंजी को पास करके, Places को शुरू करें.
    • AutocompleteSupportFragment को शुरू करें.
    • आपको जगह का किस तरह का डेटा चाहिए, यह बताने के लिए setPlaceFields() को कॉल करें.
    • नतीजे का इस्तेमाल करने के लिए, PlaceSelectionListener जोड़ें. साथ ही, किसी भी गड़बड़ी को मैनेज करें.

    यहां दिए गए उदाहरण में, किसी गतिविधि में ऑटोकंप्लीट विजेट जोड़ने का तरीका बताया गया है:

    /**
     * Initialize Places. For simplicity, the API key is hard-coded. In a production
     * environment we recommend using a secure mechanism to manage API keys.
     */
    if (!Places.isInitialized()) {
        Places.initialize(getApplicationContext(), "YOUR_API_KEY");
    }
    
    // Initialize the AutocompleteSupportFragment.
    AutocompleteSupportFragment autocompleteFragment = (AutocompleteSupportFragment)
            getSupportFragmentManager().findFragmentById(R.id.autocomplete_fragment);
    
    autocompleteFragment.setPlaceFields(Arrays.asList(Place.Field.ID, Place.Field.DISPLAY_NAME));
    
    autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
        @Override
        public void onPlaceSelected(Place place) {
            // TODO: Get info about the selected place.
            Log.i(TAG, "Place: " + place.getName() + ", " + place.getId());
        }
    
        @Override
        public void onError(Status status) {
            // TODO: Handle the error.
            Log.i(TAG, "An error occurred: " + status);
        }
    });
    

अपने-आप पूरा होने की सुविधा वाली गतिविधि को लॉन्च करने के लिए, इंटेंट का इस्तेमाल करना

  1. ऐप्लिकेशन का कॉन्टेक्स्ट और अपनी एपीआई कुंजी पास करके, Places को शुरू करना
  2. अपनी पसंद का PlaceAutocomplete मोड (फ़ुल-स्क्रीन या ओवरले) डालकर, Autocomplete.IntentBuilder का इस्तेमाल करके इंटेंट बनाएं. इंटेंट को startActivityForResult को कॉल करना होगा. इसके लिए, आपको एक अनुरोध कोड देना होगा, जो आपके इंटेंट की पहचान करता है.
  3. चुनी गई जगह की जानकारी पाने के लिए, onActivityResult कॉलबैक को बदलें.

यहां दिए गए उदाहरण में, ऑटोकंप्लीट की सुविधा को लॉन्च करने के लिए इंटेंट का इस्तेमाल करने और फिर नतीजे को मैनेज करने का तरीका बताया गया है:

    /**
     * Initialize Places. For simplicity, the API key is hard-coded. In a production
     * environment we recommend using a secure mechanism to manage API keys.
     */
    if (!Places.isInitialized()) {
        Places.initialize(getApplicationContext(), "YOUR_API_KEY");
    }

    ...

    // Set the fields to specify which types of place data to return.
    List<Place.Field> fields = Arrays.asList(Place.Field.ID, Place.Field.DISPLAY_NAME);

    // Start the autocomplete intent.
    Intent intent = new Autocomplete.IntentBuilder(
            AutocompleteActivityMode.FULLSCREEN, fields)
            .build(this);
    startActivityForResult(intent, AUTOCOMPLETE_REQUEST_CODE);

    ...

    /**
     * Override the activity's onActivityResult(), check the request code, and
     * do something with the returned place data (in this example its place name and place ID).
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == AUTOCOMPLETE_REQUEST_CODE) {
            if (resultCode == RESULT_OK) {
                Place place = Autocomplete.getPlaceFromIntent(data);
                Log.i(TAG, "Place: " + place.getName() + ", " + place.getId());
            } else if (resultCode == AutocompleteActivity.RESULT_ERROR) {
                // TODO: Handle the error.
                Status status = Autocomplete.getStatusFromIntent(data);
                Log.i(TAG, status.getStatusMessage());
            } else if (resultCode == RESULT_CANCELED) {
                // The user canceled the operation.
            }
        }
    }

जगह चुनने की सुविधा अब उपलब्ध नहीं है

जगह चुनने की सुविधा को 29 जनवरी, 2019 को बंद कर दिया गया था. इसे 29 जुलाई, 2019 को बंद कर दिया गया था और अब यह उपलब्ध नहीं है. इसका इस्तेमाल जारी रखने पर, आपको गड़बड़ी का मैसेज दिखेगा. नया SDK, जगह चुनने की सुविधा के साथ काम नहीं करता.