مهاجرت از مکان فعلی (قدمتی) به جستجوی نزدیک (جدید)

توسعه‌دهندگان منطقه اقتصادی اروپا (EEA)

کیت توسعه نرم‌افزاری مکان‌ها برای اندروید (قدیمی) از مکان فعلی (قدیمی) پشتیبانی می‌کند. اگر با مکان فعلی (قدیمی) آشنا هستید، جستجوی نزدیک (جدید) تغییرات زیر را ایجاد می‌کند:

  • از یک مدل قیمت‌گذاری جدید استفاده می‌کند. برای اطلاعات قیمت‌گذاری برای همه APIها، به Places SDK برای اندروید (جدید) مراجعه کنید.

  • شما باید برنامه خود را با فراخوانی متد Places.initializeWithNewPlacesApiEnabled() مقداردهی اولیه کنید. برای اطلاعات بیشتر در مورد انتخاب سرویس Places API، به بخش «راه‌اندازی پروژه Google Cloud» مراجعه کنید.

  • ماسک کردن فیلد الزامی است. شما باید مشخص کنید که می‌خواهید کدام فیلدها در پاسخ برگردانده شوند. هیچ لیست پیش‌فرضی از فیلدهای برگردانده شده وجود ندارد. اگر این لیست را حذف کنید، متدها خطا برمی‌گردانند.

  • جستجوی نزدیک (جدید) PlaceLikelihood پشتیبانی نمی‌کند. با جستجوی نزدیک (جدید)، می‌توانید از ترتیب نتایج برای تعیین محتمل‌ترین مکان استفاده کنید.

مثال‌های جستجوی نزدیک (جدید)

برای اطلاعات بیشتر و همچنین مثال‌هایی از نحوه استفاده از جستجوی نزدیک (جدید)، به مستندات جستجوی نزدیک (جدید) مراجعه کنید.

برای پیدا کردن مکان فعلی از جستجوی نزدیک (جدید) استفاده کنید

نمونه زیر نحوه دریافت مکان فعلی با جستجوی نزدیک (جدید) را با جایگزینی استفاده از PlacesClient.findCurrentPlace() با PlacesClient.searchNearby() نشان می‌دهد:

public class MainActivity extends AppCompatActivity {

  private FusedLocationProviderClient fusedLocationProviderClient;

  @Override
  protected void onCreate(@Nullable Bundle savedInstanceState) {
    // ...

    // get permission
    if (ContextCompat.checkSelfPermission(this,
        Manifest.permission.ACCESS_FINE_LOCATION)
        == PackageManager.PERMISSION_GRANTED) {

      // get location and search
      fusedLocationProviderClient
        .getLastLocation()
        .addOnSuccessListener(
            this,
            location -> {
              if (location != null) {
                LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
                CircularBounds circle = CircularBounds.newInstance(latLng, 100);
                List<Place.Field> placeFields = Arrays.asList(Place.Field.ID, Place.Field.DISPLAY_NAME);

                // Define a list of types to exclude. Adjust this list to suit each application.
                final List<String> excludedTypes = Arrays.asList("public_bathroom", "beach");

                SearchNearbyRequest request
                        = SearchNearbyRequest.builder(/* location restriction = */ circle, placeFields)
                                .setExcludedTypes(excludedTypes)
                                .setRankPreference(SearchNearbyRequest.RankPreference.DISTANCE)
                                .build();

                placesClient
                    .searchNearby(request)
                    .addOnSuccessListener(
                        response -> {
                            List<Place> places = response.getPlaces();
                            // do more on the results
                        })
                    .addOnFailureListener(
                        exception -> {
                            // handle failure
                        });
              } else {
                // failed to get location.
              }
            })
        .addOnFailureListener(
            e -> {
              // handle error
            });

    } else {
      ActivityCompat.requestPermissions(
          this,
          new String[] {Manifest.permission.ACCESS_FINE_LOCATION},
          PERMISSION_REQUEST_CODE);
    }

  }
}