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

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

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

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

मुख्य रूप से ये बदलाव हो सकते हैं:

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

Places की कंपैटबिलिटी लाइब्रेरी के बारे में जानकारी

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

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

Places की कंपैटबिलिटी लाइब्रेरी को फ़्रीज़ करना और बंद करना

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

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

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

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

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

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

    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 के लिए 'जगह के लिए SDK टूल' का 'Play सेवाएं' वर्शन इस्तेमाल किया जा रहा है, तो:

    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 — अनुरोध अस्वीकार कर दिया गया. ऐसा इन वजहों से हो सकता है:

    • कोई एपीआई पासकोड नहीं दिया गया.
    • एक गलत एपीआई पासकोड दिया गया है.
    • Places API को Cloud कंसोल में चालू नहीं किया गया है.
    • एक एपीआई पासकोड दिया गया है, जिसमें पासकोड से जुड़ी गलत पाबंदियां हैं.
  • 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.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.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.Field का कलेक्शन पास करें, जैसा कि इस उदाहरण में दिखाया गया है:

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

इनमें से एक या ज़्यादा फ़ील्ड का इस्तेमाल किया जा सकता है:

  • Place.Field.ADDRESS
  • Place.Field.ID
  • Place.Field.LAT_LNG
  • Place.Field.NAME
  • Place.Field.OPENING_HOURS
  • Place.Field.PHONE_NUMBER
  • Place.Field.PHOTO_METADATAS
  • Place.Field.PLUS_CODE
  • Place.Field.PRICE_LEVEL
  • Place.Field.RATING
  • Place.Field.TYPES
  • Place.Field.USER_RATINGS_TOTAL
  • Place.Field.VIEWPORT
  • Place.Field.WEBSITE_URI

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

स्थान पिकर और अपने आप पूरा होने वाले अपडेट

यह अनुभाग स्थान विजेट में किए गए बदलावों के बारे में बताता है (स्थान पिकर और अपने आप पूर्ण).

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

अपने-आप पूरा होने की सुविधा में ये बदलाव किए गए हैं:

  • 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.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.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 टूल, प्लेस पिकर के साथ काम नहीं करता.