การย้ายข้อมูลไปยังไคลเอ็นต์ New Places SDK

คู่มือนี้จะอธิบายการเปลี่ยนแปลงระหว่างไลบรารีความเข้ากันได้ของ Places กับ Places SDK สําหรับ Android เวอร์ชันสแตนด์อโลนใหม่ หากคุณใช้ไลบรารีความเข้ากันได้ของ Places แทนการย้ายข้อมูลไปยัง Places SDK เวอร์ชันสแตนด์อโลนใหม่สําหรับ Android คู่มือนี้จะแสดงวิธีอัปเดตโปรเจ็กต์เพื่อใช้ Places SDK เวอร์ชันใหม่สําหรับ Android

วิธีเดียวในการเข้าถึงฟีเจอร์และการแก้ไขข้อบกพร่องใน Places SDK สำหรับ Android เวอร์ชัน 2.6.0 ขึ้นไปคือการใช้ Places SDK สำหรับ Android Google ขอแนะนำให้อัปเดตจากไลบรารีที่เข้ากันได้เป็น Places SDK เวอร์ชันใหม่สำหรับ Android โดยเร็วที่สุด

มีอะไรเปลี่ยนแปลงบ้าง

การเปลี่ยนแปลงหลักๆ มีดังนี้

  • Places SDK เวอร์ชันใหม่สำหรับ Android จะเผยแพร่เป็นไลบรารีไคลเอ็นต์แบบคงที่ ก่อนเดือนมกราคม 2019 Places SDK สำหรับ Android พร้อมให้บริการผ่านบริการ Google Play ตั้งแต่นั้นมา เราได้จัดเตรียมไลบรารีความเข้ากันได้ของ Places เพื่อให้การเปลี่ยนไปใช้ Places SDK ใหม่สำหรับ Android เป็นไปอย่างราบรื่น
  • โดยจะมีวิธีการใหม่ทั้งหมด
  • ตอนนี้ระบบรองรับมาสก์ช่องสําหรับเมธอดที่แสดงรายละเอียดสถานที่แล้ว คุณสามารถใช้มาสก์ช่องเพื่อระบุประเภทข้อมูลสถานที่ที่จะแสดงได้
  • ปรับปรุงรหัสสถานะที่ใช้รายงานข้อผิดพลาดแล้ว
  • ตอนนี้ฟีเจอร์เติมข้อความอัตโนมัติรองรับโทเค็นเซสชันแล้ว
  • เครื่องมือเลือกสถานที่ไม่มีให้บริการแล้ว

เกี่ยวกับไลบรารีความเข้ากันได้ของ Places

เมื่อเดือนมกราคม 2019 เราได้เปิดตัว Places SDK สำหรับ Android แบบสแตนด์อโลนเวอร์ชัน 1.0 โดย Google ได้จัดเตรียมไลบรารีความเข้ากันได้เพื่อช่วยในการย้ายข้อมูลจาก Places SDK สำหรับ Android เวอร์ชันบริการ Google Play ที่เลิกใช้งานแล้ว (com.google.android.gms:play-services-places)

เราได้จัดเตรียมไลบรารีความเข้ากันได้นี้ไว้ชั่วคราวเพื่อเปลี่ยนเส้นทางและแปลการเรียก API ที่มุ่งเป้าไปยัง Google Play Services เวอร์ชันต่างๆ เป็นเวอร์ชันสแตนด์อโลนใหม่จนกว่านักพัฒนาแอปจะย้ายข้อมูลโค้ดของตนเพื่อใช้ชื่อใหม่ใน SDK สแตนด์อโลนได้ สำหรับ Places SDK สำหรับ Android แต่ละเวอร์ชันที่เผยแพร่ตั้งแต่เวอร์ชัน 1.0 ถึง 2.6.0 เรามีการวางจำหน่ายไลบรารีความเข้ากันได้ของ Places เวอร์ชันที่สอดคล้องกันเพื่อให้มีฟังก์ชันการทำงานที่เทียบเท่า

การหยุดให้บริการและเลิกใช้งานไลบรารีความเข้ากันได้ของ Places

ไลบรารีความเข้ากันได้ของ Places SDK สำหรับ Android ทุกเวอร์ชันจะเลิกใช้งานตั้งแต่วันที่ 31 มีนาคม 2022 เวอร์ชัน 2.6.0 เป็นเวอร์ชันล่าสุดของห้องสมุดความเข้ากันได้ของ Places วิธีเดียวในการเข้าถึงฟีเจอร์และการแก้ไขข้อบกพร่องใน Places SDK สําหรับ Android เวอร์ชัน 2.6.0 ขึ้นไปคือการใช้ Places SDK สําหรับ Android

Google ขอแนะนําให้คุณเปลี่ยนไปใช้ Places SDK สําหรับ Android เพื่อเข้าถึงฟีเจอร์ใหม่และการแก้ไขข้อบกพร่องที่สําคัญสําหรับรุ่นที่สูงกว่า 2.6.0 หากกําลังใช้ไลบรารีความเข้ากันได้ ให้ทําตามขั้นตอนด้านล่างในส่วนติดตั้ง Places SDK สําหรับ Android เพื่อย้ายข้อมูลไปยัง Places SDK สําหรับ Android

ติดตั้งไลบรารีของไคลเอ็นต์

Places SDK สำหรับ Android เวอร์ชันใหม่จะเผยแพร่เป็นไลบรารีไคลเอ็นต์แบบคงที่

ใช้ Maven เพื่อเพิ่ม Places SDK สำหรับ Android ลงในโปรเจ็กต์ Android Studio โดยทำดังนี้

  1. หากใช้ไลบรารีความเข้ากันได้ของ Places อยู่ ให้ทำดังนี้

    1. แทนที่บรรทัดต่อไปนี้ในส่วน dependencies

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

      เปลี่ยนเป็น Places SDK สําหรับ Android ด้วยบรรทัดนี้

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

  2. หากตอนนี้คุณใช้ Places SDK สำหรับ Android เวอร์ชันบริการ Play ให้ทำดังนี้

    1. แทนที่บรรทัดต่อไปนี้ในส่วน dependencies

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

      เปลี่ยนเป็น Places SDK สําหรับ Android ด้วยบรรทัดนี้

          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. บิลด์แอป หากเห็นข้อผิดพลาดในการบิลด์เนื่องจากการเปลี่ยนไปใช้ Places SDK สําหรับ Android โปรดดูข้อมูลเกี่ยวกับการแก้ไขข้อผิดพลาดเหล่านี้ในส่วนด้านล่าง

เริ่มต้นไคลเอ็นต์ 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);

รหัสสถานะ

รหัสสถานะสำหรับข้อผิดพลาดเกี่ยวกับขีดจำกัด QPS มีการเปลี่ยนแปลง ตอนนี้ระบบจะแสดงข้อผิดพลาดเกี่ยวกับขีดจำกัด QPS ผ่าน PlaceStatusCodes.OVER_QUERY_LIMIT ไม่มีการจำกัด QPD อีกต่อไป

เราได้เพิ่มรหัสสถานะต่อไปนี้

  • REQUEST_DENIED — คำขอถูกปฏิเสธ เหตุผลที่เป็นไปได้สำหรับความแตกต่างดังกล่าวมีดังต่อไปนี้

    • ไม่ได้ระบุคีย์ API
    • ระบุคีย์ API ไม่ถูกต้อง
    • ไม่ได้เปิดใช้ Places API ในคอนโซลระบบคลาวด์
    • มีการใช้คีย์ API ที่มีข้อจํากัดของคีย์ไม่ถูกต้อง
  • INVALID_REQUEST — คำขอไม่ถูกต้องเนื่องจากไม่มีหรืออาร์กิวเมนต์ไม่ถูกต้อง

  • NOT_FOUND — ไม่พบผลลัพธ์สำหรับคำขอที่ระบุ

วิธีการใหม่

Places SDK สำหรับ Android เวอร์ชันใหม่มีวิธีการใหม่ทั้งหมดที่ออกแบบมาเพื่อให้สอดคล้องกัน วิธีการใหม่ทั้งหมดจะเป็นไปตามข้อกำหนดต่อไปนี้

  • ปลายทางจะไม่ใช้คํากริยา 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. โทรหา addOnSuccessListener() เพื่อจัดการกับ FetchPlaceResponse ระบบจะแสดงผลลัพธ์ 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() แสดงรูปภาพสำหรับสถานที่ รูปแบบคำขอรูปภาพได้รับการปรับปรุงให้เข้าใจง่ายขึ้น ตอนนี้คุณขอ PhotoMetadata ได้โดยตรงจากออบเจ็กต์ Place แล้วโดยไม่ต้องส่งคำขอแยกต่างหากอีกต่อไป รูปภาพมีความกว้างหรือสูงได้สูงสุด 1,600 พิกเซล 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. เพิ่ม OnSuccessListener เพื่อรับข้อมูลเมตาของรูปภาพจาก Place ที่ได้ใน FetchPlaceResponse จากนั้นใช้ข้อมูลเมตาของรูปภาพที่ได้เพื่อรับบิตแมปและข้อความระบุแหล่งที่มา

    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());
   }
});

โทเค็นเซสชัน

โทเค็นเซสชันจะจัดกลุ่มระยะการค้นหาและการเลือกของผู้ใช้ไว้ในเซสชันที่แยกต่างหากเพื่อวัตถุประสงค์ในการเรียกเก็บเงิน เราขอแนะนำให้ใช้โทเค็นเซสชันสำหรับเซสชันการเติมข้อความอัตโนมัติทั้งหมด เซสชันจะเริ่มต้นเมื่อผู้ใช้เริ่มพิมพ์ข้อความค้นหา และสิ้นสุดเมื่อเลือกสถานที่ แต่ละเซสชันอาจมีคำค้นหาหลายรายการตามด้วยการเลือกสถานที่ 1 แห่ง เมื่อเซสชันสิ้นสุดลง โทเค็นจะใช้งานไม่ได้อีกต่อไป แอปของคุณจึงต้องสร้างโทเค็นใหม่สำหรับแต่ละเซสชัน

มาสก์ช่อง

ในเมธอดที่แสดงรายละเอียดสถานที่ คุณต้องระบุประเภทข้อมูลสถานที่ที่จะแสดงพร้อมกับคำขอแต่ละรายการ วิธีนี้ช่วยให้มั่นใจว่าคุณขอ (และชำระเงินสำหรับ) เฉพาะข้อมูลที่จะใช้จริงเท่านั้น

หากต้องการระบุประเภทข้อมูลที่จะให้แสดง ให้ส่งอาร์เรย์ Place.Field ใน FetchPlaceRequest ดังที่แสดงในตัวอย่างต่อไปนี้

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

ดูรายการช่องที่คุณใช้ในมาสก์ฟิลด์ได้ในส่วนช่องข้อมูลสถานที่ (ใหม่)

อ่านข้อมูลเพิ่มเติมเกี่ยวกับ SKU ของข้อมูล Places

การอัปเดตเครื่องมือเลือกสถานที่และฟีเจอร์เติมข้อความอัตโนมัติ

ส่วนนี้จะอธิบายการเปลี่ยนแปลงในวิดเจ็ตสถานที่ (เครื่องมือเลือกสถานที่และฟีเจอร์เติมข้อความอัตโนมัติ)

การเติมข้อความอัตโนมัติแบบเป็นโปรแกรม

เราได้ทําการเปลี่ยนแปลงต่อไปนี้กับฟีเจอร์เติมข้อความอัตโนมัติ

  • เปลี่ยนชื่อ PlaceAutocomplete เป็น Autocomplete
    • เปลี่ยนชื่อ PlaceAutocomplete.getPlace เป็น Autocomplete.getPlaceFromIntent
    • เปลี่ยนชื่อ PlaceAutocomplete.getStatus เป็น Autocomplete.getStatusFromIntent
  • เปลี่ยนชื่อ PlaceAutocomplete.RESULT_ERROR เป็น AutocompleteActivity.RESULT_ERROR (การจัดการข้อผิดพลาดสำหรับข้อมูลโค้ดที่สมบูรณ์อัตโนมัติไม่มีการเปลี่ยนแปลง)

เครื่องมือเลือกสถานที่

เราได้เลิกใช้งานเครื่องมือเลือกสถานที่แล้วเมื่อวันที่ 29 มกราคม 2019 เราปิดฟีเจอร์นี้ไปเมื่อวันที่ 29 กรกฎาคม 2019 และฟีเจอร์ดังกล่าวไม่พร้อมให้บริการอีกต่อไป หากใช้ต่อไป คุณจะได้รับข้อความแสดงข้อผิดพลาด SDK ใหม่ไม่รองรับเครื่องมือเลือกสถานที่

วิดเจ็ตการเติมข้อความอัตโนมัติ

วิดเจ็ตการเติมข้อความอัตโนมัติได้รับการอัปเดตดังนี้

  • ระบบได้นำคำนำหน้า Place ออกจากชั้นเรียนทั้งหมดแล้ว
  • เพิ่มการรองรับโทเค็นเซสชัน วิดเจ็ตจะจัดการโทเค็นให้คุณโดยอัตโนมัติในเบื้องหลัง
  • เพิ่มการรองรับมาสก์ฟิลด์ ซึ่งช่วยให้คุณเลือกประเภทข้อมูลสถานที่ที่จะแสดงหลังจากที่ผู้ใช้ทำการเลือก

ส่วนต่อไปนี้แสดงวิธีเพิ่มวิดเจ็ตการเติมข้อความอัตโนมัติลงในโปรเจ็กต์

ฝัง AutocompleteFragment

หากต้องการเพิ่มข้อมูลโค้ดที่เติมข้อความอัตโนมัติ ให้ทําตามขั้นตอนต่อไปนี้

  1. เพิ่มข้อมูลโค้ดไปยังเลย์เอาต์ XML ของกิจกรรม ดังที่แสดงในตัวอย่างต่อไปนี้

    <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 โดยส่งบริบทแอปพลิเคชันและคีย์ API
    • เริ่มต้น 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);
        }
    });
    

ใช้ Intent เพื่อเปิดใช้งานกิจกรรมการเติมข้อความอัตโนมัติ

  1. เริ่มต้น Places โดยส่งบริบทแอปและคีย์ API
  2. ใช้ Autocomplete.IntentBuilder เพื่อสร้าง Intent โดยส่งโหมด PlaceAutocomplete ที่ต้องการ (เต็มหน้าจอหรือวางซ้อน) Intent ต้องเรียกใช้ startActivityForResult โดยส่งรหัสคำขอที่ระบุ Intent ของคุณ
  3. ลบล้างการเรียกกลับ onActivityResult เพื่อรับสถานที่ที่เลือก

ตัวอย่างต่อไปนี้แสดงวิธีใช้ Intent เพื่อเปิดการเติมข้อความอัตโนมัติ แล้วจัดการผลลัพธ์

    /**
     * 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 ใหม่ไม่รองรับเครื่องมือเลือกสถานที่