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.checkSelfPermissioniş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. FindCurrentPlaceRequestoluşturun,Place.Field'lerinList'ını iletin ve uygulamanızın istemesi gereken yer verisi türlerini belirtin.- Önceki adımda oluşturduğunuz
FindCurrentPlaceRequestdeğerini ileterekPlacesClient.findCurrentPlace()işlevini çağırın. PlaceLikelihoodlistesiniFindCurrentPlaceResponseadresinden 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 = listOf(Place.Field.DISPLAY_NAME, Place.Field.FORMATTED_ADDRESS, Place.Field.LOCATION) val request = 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 ) { placesClient.findCurrentPlace(request).addOnSuccessListener { response -> binding.progressBar.visibility = View.GONE adapter.setPlaceLikelihoods(response.placeLikelihoods) }.addOnFailureListener { exception -> binding.progressBar.visibility = View.GONE 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 = Arrays.asList(Place.Field.DISPLAY_NAME, Place.Field.FORMATTED_ADDRESS, Place.Field.LOCATION); // 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 -> { binding.progressBar.setVisibility(View.GONE); if (task.isSuccessful()) { FindCurrentPlaceResponse response = task.getResult(); adapter.setPlaceLikelihoods(response.getPlaceLikelihoods()); } else { Exception exception = task.getException(); if (exception instanceof ApiException apiException) { Log.e("CurrentPlace", "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.