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

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

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

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

การเปลี่ยนแปลงในด้านต่างๆ ที่สําคัญมีดังต่อไปนี้

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

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

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

ไลบรารีความเข้ากันได้นี้มีให้ชั่วคราวเพื่อเปลี่ยนเส้นทางและแปลการเรียก API ที่มุ่งเป้าไปที่เวอร์ชันบริการ Google Play เป็นเวอร์ชันสแตนด์อโลนเวอร์ชันใหม่จนกว่านักพัฒนาซอฟต์แวร์จะย้ายข้อมูลโค้ดของตนไปใช้ชื่อใหม่ใน 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 สําหรับแอนดรอยด์:

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

  2. หากคุณกําลังใช้ Places SDK เวอร์ชันบริการของ Play สําหรับแอนดรอยด์ ให้ทําดังนี้

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

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

      ด้วยบรรทัดนี้ที่จะเปลี่ยนเป็น Places SDK สําหรับแอนดรอยด์:

          implementation 'com.google.android.libraries.places:places:3.1.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 ใน Cloud Console
    • มีการระบุคีย์ 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.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 โดยไม่ต้องมีคําขอแยกต่างหากอีกต่อไป รูปภาพมีความกว้างหรือความสูงได้สูงสุด 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. เพิ่ม 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.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.ADDRESS,
                                              Place.Field.ID,
                                              Place.Field.PHONE_NUMBER);

คุณสามารถใช้ช่องต่อไปนี้อย่างน้อย 1 ช่อง

  • 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 ของข้อมูล 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.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 ซึ่งจะส่งผ่านรหัสคําขอที่ระบุความตั้งใจของคุณ
  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.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 ใหม่ไม่สนับสนุนเครื่องมือเลือกสถานที่