Android için Yerler SDK'sını kullanarak cihazın mevcut konumunda bulunan yeri keşfedebilirsiniz. Yer örnekleri arasında yerel işletmeler, ilgi çekici yerler ve coğrafi konumlar bulunur.
İzinler
Kitaplığı kullanmak için uygulamanızın manifest dosyasında ek izinler bildirmeniz gerekmez. Kitaplık, kullandığı tüm izinleri kendi manifest dosyasında bildirir. Ancak uygulamanız PlacesClient.findCurrentPlace()
kullanıyorsa çalışma zamanında konum izinleri istemeniz gerekir.
Uygulamanız PlacesClient.findCurrentPlace()
kullanmıyorsa kitaplık tarafından sunulan ACCESS_FINE_LOCATION
ve ACCESS_COARSE_LOCATION
izinlerini manifestinize aşağıdakileri ekleyerek açıkça kaldırın:
<manifest ... xmlns:tools="http://schemas.android.com/tools"> ... <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" tools:node="remove"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" tools:node="remove"/> ... </manifest>
İzinler hakkında daha fazla bilgi edinin ve kullanmaya başlamak için EasyPermissions'ı kullanmayı düşünün.
Geçerli konumu alma
Cihazın şu anda bulunduğu yerel işletmeyi veya başka bir yeri bulmak için aşağıdaki adımları uygulayın:
- Kullanıcının cihaz konumuna erişim izni verip vermediğini kontrol etmek için
ContextCompat.checkSelfPermission
işlevini çağırın. Uygulamanızda, kullanıcıdan izin istemek ve sonucu işlemek için kod da bulunmalıdır. Ayrıntılar için Uygulama İzinleri İste başlıklı makaleyi inceleyin. FindCurrentPlaceRequest
oluşturun,Place.Field
'lerinList
'ını iletin ve uygulamanızın istemesi gereken yer verisi türlerini belirtin.- Önceki adımda oluşturduğunuz
FindCurrentPlaceRequest
değerini ileterekPlacesClient.findCurrentPlace()
işlevini çağırın. PlaceLikelihood
listesiniFindCurrentPlaceResponse
adresinden alın.
Alanlar, Yer Arama sonuçlarına karşılık gelir ve üç faturalandırma kategorisine ayrılmıştır: Temel, Kişi ve Atmosfer. Temel alanlar taban ücret üzerinden faturalandırılır ve ek ücret alınmaz. Kişi ve Atmosfer alanları daha yüksek bir ücretle faturalandırılır. Yer verisi isteklerinin nasıl faturalandırıldığı hakkında daha fazla bilgi için Kullanım ve Faturalandırma başlıklı makaleyi inceleyin.
API, FindCurrentPlaceResponse
değerini Task
içinde döndürür.
FindCurrentPlaceResponse
, cihazın bulunma olasılığı olan yerleri temsil eden PlaceLikelihood
nesnelerinin listesini içerir. Her yer için sonuç, yerin doğru yer olma olasılığını gösterir. Belirtilen cihaz konumuna karşılık gelen bilinen bir yer yoksa liste boş olabilir.
PlaceLikelihood.getPlace()
numaralı telefonu arayarak Place
nesnesini alabilir ve PlaceLikelihood.getLikelihood()
numaralı telefonu arayarak yerin olasılık puanını öğrenebilirsiniz. Değerin yüksek olması, yerin en iyi eşleşme olma olasılığının daha yüksek olduğu anlamına gelir.
Aşağıdaki kod örneği, cihazın bulunma olasılığının en yüksek olduğu yerlerin listesini alır ve her yerin adını ve olasılığını günlüğe kaydeder.
Kotlin
// Use fields to define the data types to return. val placeFields: List<Place.Field> = listOf(Place.Field.NAME) // Use the builder to create a FindCurrentPlaceRequest. val request: FindCurrentPlaceRequest = FindCurrentPlaceRequest.newInstance(placeFields) // Call findCurrentPlace and handle the response (first check that the user has granted permission). if (ContextCompat.checkSelfPermission(this, permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { val placeResponse = placesClient.findCurrentPlace(request) placeResponse.addOnCompleteListener { task -> if (task.isSuccessful) { val response = task.result for (placeLikelihood: PlaceLikelihood in response?.placeLikelihoods ?: emptyList()) { Log.i( TAG, "Place '${placeLikelihood.place.name}' has likelihood: ${placeLikelihood.likelihood}" ) } } else { val exception = task.exception if (exception is ApiException) { Log.e(TAG, "Place not found: ${exception.statusCode}") } } } } else { // A local method to request required permissions; // See https://developer.android.com/training/permissions/requesting getLocationPermission() }
Java
// Use fields to define the data types to return. List<Place.Field> placeFields = Collections.singletonList(Place.Field.NAME); // Use the builder to create a FindCurrentPlaceRequest. FindCurrentPlaceRequest request = FindCurrentPlaceRequest.newInstance(placeFields); // Call findCurrentPlace and handle the response (first check that the user has granted permission). if (ContextCompat.checkSelfPermission(this, ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { Task<FindCurrentPlaceResponse> placeResponse = placesClient.findCurrentPlace(request); placeResponse.addOnCompleteListener(task -> { if (task.isSuccessful()){ FindCurrentPlaceResponse response = task.getResult(); for (PlaceLikelihood placeLikelihood : response.getPlaceLikelihoods()) { Log.i(TAG, String.format("Place '%s' has likelihood: %f", placeLikelihood.getPlace().getName(), placeLikelihood.getLikelihood())); } } else { Exception exception = task.getException(); 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(); }
Olasılık değerleriyle ilgili notlar:
- Olasılık, tek bir istek için döndürülen yerler listesinde yerin en iyi eşleşme olma olasılığını gösterir. Farklı isteklerde olasılıkları karşılaştıramazsınız.
- Olasılık değeri 0,0 ile 1,0 arasında olur.
Örneğin, doğru yerin A Yeri olma olasılığının% 55, B Yeri olma olasılığının ise% 35 olduğunu belirtmek için yanıtta iki üye bulunur: A Yeri (olasılık: 0, 55) ve B Yeri (olasılık: 0,35).
Uygulamanızda ilişkilendirmeleri gösterme
Uygulamanız PlacesClient.findCurrentPlace()
kaynağından elde edilen bilgileri gösterdiğinde, ilişkilendirmeleri de göstermelidir. İlişkilendirmeler ile ilgili dokümanları inceleyin.