Android için Yerler SDK'sı, uygulamanıza yer adı ve adresi, enlem/boylam koordinatları olarak belirtilen coğrafi konum, yer türü (ör. gece kulübü, evcil hayvan mağazası, müze) ve daha fazlası dahil olmak üzere yerlerle ilgili zengin bilgiler sağlar. Belirli bir yerle ilgili bu bilgilere erişmek için yer kimliğini kullanabilirsiniz. Yer kimliği, bir yeri benzersiz şekilde tanımlayan kararlı bir tanımlayıcıdır.
Yer ayrıntıları
Place
nesnesi, belirli bir yer hakkında bilgi sağlar. Bir Place
nesneyi aşağıdaki şekillerde edinebilirsiniz:
PlacesClient.fetchPlace()
numaralı telefonu arayın: Kimliğe göre yer bulma kılavuzunu inceleyin.- Arama
PlacesClient.findCurrentPlace()
: Mevcut yeri bulma kılavuzunu inceleyin.
Bir yer isteğinde bulunurken döndürülecek yer verilerini belirtmeniz gerekir. Bunu yapmak için döndürülecek verileri belirten bir Place.Field değeri listesi iletin. Bu liste, her istek için maliyeti etkilediği için dikkate alınması gereken önemli bir konudur.
Yer verileri sonuçları boş olamayacağından yalnızca veri içeren yer sonuçları döndürülür. Örneğin, istenen bir yerde fotoğraf yoksa photos
alanı sonuçta yer almaz.
Aşağıdaki örnekte, bir istek tarafından döndürülen verileri belirtmek için üç Place.Field değerinin listesi iletilmektedir:
Kotlin
// Specify the fields to return. val placeFields = listOf(Place.Field.NAME, Place.Field.RATING, Place.Field.OPENING_HOURS)
Java
// Specify the fields to return. final List<Place.Field> placeFields = Arrays.asList(Place.Field.NAME, Place.Field.RATING, Place.Field.OPENING_HOURS);
Yer nesnesi veri alanlarına erişme
Place
nesnesini aldıktan sonra, istekte belirtilen veri alanlarına erişmek için nesnenin yöntemlerini kullanın. Alan Place
nesnesinde yoksa ilgili yöntem null döndürür. Kullanılabilir yöntemlerden birkaçına ait örnekler aşağıda verilmiştir.
getAddress()
: Kullanıcılar tarafından okunabilen biçimdeki yer adresi.getAddressComponents()
: Bu yer için adres bileşenlerininList
Bu bileşenler, bir yerin adresiyle ilgili yapılandırılmış bilgileri ayıklamak (ör. bir yerin bulunduğu şehri bulmak) amacıyla sağlanır. Adres biçimlendirme için bu bileşenleri kullanmayın. Bunun yerine, yerelleştirilmiş biçimlendirilmiş bir adres sağlayangetAddress()
işlevini çağırın.getId()
: Yerin metin olarak tanımlanmasıdır. Bu sayfanın geri kalanında yer kimlikleri hakkında daha fazla bilgi edinin.getLatLng()
: Enlem ve boylam koordinatları olarak belirtilen, yerin coğrafi konumu.getName()
: Yerin adı.getOpeningHours()
: YerinOpeningHours
Haftanın her günü için açılış ve kapanış saatlerini temsil eden dizelerin listesini döndürmek üzereOpeningHours.getWeekdayText()
işlevini çağırın.getWeekdayText()
tarafından sağlanan verilere eşdeğer daha ayrıntılı bilgiler içerenperiod
nesnelerinin listesini döndürmek içinOpeningHours.getPeriods()
işlevini çağırın.Place
nesnesi, bir yerin önümüzdeki yedi gün içindeki çalışma saatlerini döndürengetCurrentOpeningHours()
yöntemini ve bir yerin önümüzdeki yedi gün içindeki ikincil çalışma saatlerini döndürengetSecondaryOpeningHours()
yöntemini de içerir.isOpen()
: Yerin şu anda açık olup olmadığını belirten bir boole değeri. Saat belirtilmezse varsayılan olarak şu anki saat kullanılır.isOpen
yalnızcaPlace.Field.UTC_OFFSET
vePlace.Field.OPENING_HOURS
mevcutsa döndürülür. Doğru sonuçlar elde etmek için orijinal yer isteğinizdePlace.Field.BUSINESS_STATUS
vePlace.Field.UTC_OFFSET
alanlarını isteyin. İstenmezse işletmenin faaliyette olduğu varsayılır.isOpen
'yi yer ayrıntılarıyla nasıl kullanacağınızı öğrenmek için bu videoyu izleyin.
Bazı örnekler:
Kotlin
val name = place.name val address = place.address val location = place.latLng
Java
final CharSequence name = place.getName(); final CharSequence address = place.getAddress(); final LatLng location = place.getLatLng();
Kimliğe göre yer alma
Yer kimliği, bir yeri benzersiz şekilde tanımlayan metin tabanlı bir tanımlayıcıdır. Android için Yerler SDK'sında, Place.getId()
işlevini çağırarak bir yerin kimliğini alabilirsiniz.
Otomatik Yer Tamamlama hizmeti, sağlanan arama sorgusu ve filtreyle eşleşen her yer için bir yer kimliği de döndürür. Yer kimliğini saklayabilir ve daha sonra Place
nesnesini almak için kullanabilirsiniz.
Kimliğe göre bir yer almak için FetchPlaceRequest
ile birlikte PlacesClient.fetchPlace()
işlevini çağırın.
API, Task
içinde bir FetchPlaceResponse
döndürür.
FetchPlaceResponse
, sağlanan yer kimliğiyle eşleşen bir Place
nesnesi içerir.
Aşağıdaki kod örneğinde, belirtilen yerin ayrıntılarını almak için fetchPlace()
işlevinin çağrılması gösterilmektedir.
Kotlin
// Define a Place ID. val placeId = "INSERT_PLACE_ID_HERE" // Specify the fields to return. val placeFields = listOf(Place.Field.ID, Place.Field.NAME) // Construct a request object, passing the place ID and fields array. val request = FetchPlaceRequest.newInstance(placeId, placeFields) placesClient.fetchPlace(request) .addOnSuccessListener { response: FetchPlaceResponse -> val place = response.place Log.i(PlaceDetailsActivity.TAG, "Place found: ${place.name}") }.addOnFailureListener { exception: Exception -> if (exception is ApiException) { Log.e(TAG, "Place not found: ${exception.message}") val statusCode = exception.statusCode TODO("Handle error with given status code") } }
Java
// Define a Place ID. final String placeId = "INSERT_PLACE_ID_HERE"; // Specify the fields to return. final List<Place.Field> placeFields = Arrays.asList(Place.Field.ID, Place.Field.NAME); // Construct a request object, passing the place ID and fields array. final FetchPlaceRequest request = FetchPlaceRequest.newInstance(placeId, placeFields); placesClient.fetchPlace(request).addOnSuccessListener((response) -> { Place place = response.getPlace(); Log.i(TAG, "Place found: " + place.getName()); }).addOnFailureListener((exception) -> { if (exception instanceof ApiException) { final ApiException apiException = (ApiException) exception; Log.e(TAG, "Place not found: " + exception.getMessage()); final int statusCode = apiException.getStatusCode(); // TODO: Handle error with given status code. } });
Açık durumu alma
PlacesClient.isOpen(IsOpenRequest request)
yöntemi, çağrıda belirtilen saate göre yerin şu anda açık olup olmadığını belirten bir IsOpenResponse
nesnesi döndürür.
Bu yöntem, aşağıdakileri içeren tek bir IsOpenRequest
türü bağımsız değişken alır:
- Bir
Place
nesnesi veya yer kimliğini belirten bir dize. - 1970-01-01T00:00:00Z'den itibaren milisaniye cinsinden zamanı belirten isteğe bağlı bir saat değeri. Saat belirtilmezse varsayılan olarak şu anki saat kullanılır.
Bu yöntem için Place
nesnesinde aşağıdaki alanların bulunması gerekir:
Place.Field.BUSINESS_STATUS
Place.Field.CURRENT_OPENING_HOURS
Place.Field.OPENING_HOURS
Place.Field.UTC_OFFSET
Bu alanlar Place
nesnesinde sağlanmazsa veya bir yer kimliği iletiyorsanız yöntem bunları almak için PlacesClient.fetchPlace()
kullanır. Yer nesnesini gerekli alanlarla oluşturma hakkında daha fazla bilgi için Yer ayrıntıları başlıklı makaleyi inceleyin.
Aşağıdaki örnekte, bir yerin şu anda açık olup olmadığı belirlenmektedir. Bu örnekte, isOpen()
alanına yalnızca yer kimliğini gönderirsiniz:
Kotlin
val isOpenCalendar: Calendar = Calendar.getInstance() val placeId = "ChIJD3uTd9hx5kcR1IQvGfr8dbk" val request: IsOpenRequest = try { IsOpenRequest.newInstance(placeId, isOpenCalendar.timeInMillis) } catch (e: IllegalArgumentException) { e.printStackTrace() return } val isOpenTask: Task<IsOpenResponse> = placesClient.isOpen(request) isOpenTask.addOnSuccessListener { response -> val isOpen = response.isOpen } // ...
Java
@NonNull Calendar isOpenCalendar = Calendar.getInstance(); String placeId = "ChIJD3uTd9hx5kcR1IQvGfr8dbk"; IsOpenRequest isOpenRequest; try { isOpenRequest = IsOpenRequest.newInstance(placeId, isOpenCalendar.getTimeInMillis()); } catch (IllegalArgumentException e) { e.printStackTrace(); return; } Task<IsOpenResponse> placeTask = placesClient.isOpen(isOpenRequest); placeTask.addOnSuccessListener( (response) -> isOpen = response.isOpen()); // ...
Sonraki örnekte, bir Place
nesnesi ilettiğiniz isOpen()
çağrısı gösterilmektedir.
Place
nesnesi geçerli bir yer kimliği içermelidir:
Kotlin
val isOpenCalendar: Calendar = Calendar.getInstance() var place: Place val placeId = "ChIJD3uTd9hx5kcR1IQvGfr8dbk" // Specify the required fields for an isOpen request. val placeFields: List<Place.Field> = listOf( Place.Field.BUSINESS_STATUS, Place.Field.CURRENT_OPENING_HOURS, Place.Field.ID, Place.Field.OPENING_HOURS, Place.Field.UTC_OFFSET ) val placeRequest: FetchPlaceRequest = FetchPlaceRequest.newInstance(placeId, placeFields) val placeTask: Task<FetchPlaceResponse> = placesClient.fetchPlace(placeRequest) placeTask.addOnSuccessListener { placeResponse -> place = placeResponse.place val isOpenRequest: IsOpenRequest = try { IsOpenRequest.newInstance(place, isOpenCalendar.timeInMillis) } catch (e: IllegalArgumentException) { e.printStackTrace() return@addOnSuccessListener } val isOpenTask: Task<IsOpenResponse> = placesClient.isOpen(isOpenRequest) isOpenTask.addOnSuccessListener { isOpenResponse -> val isOpen = isOpenResponse.isOpen } // ... } // ...
Java
@NonNull Calendar isOpenCalendar = Calendar.getInstance(); String placeId = "ChIJD3uTd9hx5kcR1IQvGfr8dbk"; // Specify the required fields for an isOpen request. List<Place.Field> placeFields = new ArrayList<>(Arrays.asList( Place.Field.BUSINESS_STATUS, Place.Field.CURRENT_OPENING_HOURS, Place.Field.ID, Place.Field.OPENING_HOURS, Place.Field.UTC_OFFSET )); FetchPlaceRequest request = FetchPlaceRequest.newInstance(placeId, placeFields); Task<FetchPlaceResponse> placeTask = placesClient.fetchPlace(request); placeTask.addOnSuccessListener( (placeResponse) -> { Place place = placeResponse.getPlace(); IsOpenRequest isOpenRequest; try { isOpenRequest = IsOpenRequest.newInstance(place, isOpenCalendar.getTimeInMillis()); } catch (IllegalArgumentException e) { e.printStackTrace(); return; } Task<IsOpenResponse> isOpenTask = placesClient.isOpen(isOpenRequest); isOpenTask.addOnSuccessListener( (isOpenResponse) -> isOpen = isOpenResponse.isOpen()); // ... }); // ...
Uygulamanızda ilişkilendirmeleri gösterme
Uygulamanız, yer yorumları da dahil olmak üzere yer bilgilerini görüntülerken tüm ilişkilendirmeleri de görüntülemelidir. Daha fazla bilgi için ilişkilendirmeler konusuna bakın.
Yer kimlikleri hakkında daha fazla bilgi
Android için Yerler SDK'sında kullanılan yer kimliği, Places API'de kullanılanla aynı tanımlayıcıdır. Her yer kimliği yalnızca bir yeri referans alabilir ancak tek bir yerin birden fazla yer kimliği olabilir. Bir yerin yeni bir yer kimliği almasına neden olabilecek başka durumlar da vardır. Örneğin, bir işletme yeni bir konuma taşınırsa bu durumla karşılaşılabilir.
Bir yer kimliği belirterek yer isteğinde bulunduğunuzda, yanıtta her zaman aynı yeri alacağınızdan emin olabilirsiniz (yer hâlâ mevcutsa). Ancak yanıtın, isteğinizdekinden farklı bir yer kimliği içerebileceğini unutmayın.
Daha fazla bilgi için yer kimliğine genel bakış bölümünü inceleyin.