Android için Yerler SDK'sını kullanarak yeri, cihazın bildirilen konumunda keşfedebilirsiniz. Yerel işletmelere, önemli yerlere ve coğrafi konumlara örnek olarak gösterilebilir.
İzinler
Kitaplık, manifest dosyasında kullandığı tüm izinleri beyan ettiğinden kitaplığı kullanmak için uygulamanızın manifest dosyasında ek izinler bildirmeniz gerekmez. Bununla birlikte, uygulamanızda PlacesClient.findCurrentPlace()
kullanılıyorsa çalışma zamanında konum izni istemeniz gerekir.
Uygulamanız PlacesClient.findCurrentPlace()
kullanmıyorsa kitaplıkta sunulan ACCESS_FINE_LOCATION
ve ACCESS_COARSE_LOCATION
izinlerini manifest dosyanıza 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 başlamak için EasyPermissions sayfasını kullanın.
Geçerli konumu al
Yerel işletmeyi veya cihazın şu anda bulunduğu 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
yöntemini arayın. Uygulamanızın, kullanıcıdan izin istemesi ve sonucu ele alması için kod da içermesi gerekir. Ayrıntılar için Uygulama İzinleri İsteme bölümünü inceleyin. - Uygulamanızın istediği yer verisi türlerini belirterek,
Place.Field
tutarındanList
içeren birFindCurrentPlaceRequest
oluşturun. - Önceki adımda oluşturduğunuz
FindCurrentPlaceRequest
değerini ileterekPlacesClient.findCurrentPlace()
yöntemini çağırın. FindCurrentPlaceResponse
üzerindenPlaceLikelihood
listesini 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 ücretle faturalandırılır ve ek ücret alınmaz. Kişi ve Atmosfer alanları daha yüksek ücretle faturalandırılır. Yer verileri isteklerinin nasıl faturalandırıldığı hakkında daha fazla bilgi için Kullanım ve Faturalandırma'ya bakın.
API bir Task
içinde FindCurrentPlaceResponse
döndürür.
FindCurrentPlaceResponse
, cihazın bulunabileceği yerleri temsil eden PlaceLikelihood
nesnelerinin bir listesini içerir. Her yer için, sonuçta söz konusu yerin doğru olma olasılığı belirtilir. Belirtilen cihaz konumuna karşılık gelen bilinen bir yer yoksa liste boş olabilir.
Bir Place
nesnesi almak için PlaceLikelihood.getPlace()
ve bir yerin olasılık derecesini almak için
PlaceLikelihood.getLikelihood()
yöntemini çağırabilirsiniz. Daha yüksek bir değer, 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 bir yerin adını ve olasılığını günlüğe kaydeder.
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(); }
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() }
Olasılık değerleriyle ilgili notlar:
- Olasılık, bir yerin tek bir istek için döndürülen yerler listesinde en iyi eşleşme olma olasılığını göreceli olarak sağlar. Farklı isteklerdeki 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ı% 55, B Yeri olma olasılığının% 35 olduğunu göstermek için yanıtın iki üyesi vardır. Yer A'nın olasılığı 0, 55 ve Yer B B'nin olasılığı 0,35'tir.
İlişkilendirmeleri uygulamanızda gösterin
Uygulamanız, PlacesClient.findCurrentPlace()
ürününden
elde edilen bilgileri görüntülediğinde
ilişkilendirmeleri de göstermelidir. İlişkilendirmeler ile ilgili belgelere bakın.