Mevcut Yer

Platform seçin: Android iOS

Android için Yerler SDK'sını kullanarak cihazın mevcut konumunda bulunan yeri keşfedebilirsiniz. Yerlere örnek olarak yerel işletmeler, önemli yerler ve coğrafi konumlar verilebilir.

İzinler

Kitaplık, kullandığı tüm izinleri manifest dosyasında tanımladığından, kitaplığı kullanmak için uygulamanızın manifest dosyasında ek izinler beyan etmeniz gerekmez. Ancak, uygulamanız PlacesClient.findCurrentPlace() kullanıyorsa çalışma zamanında konum izinleri istemeniz gerekir.

Uygulamanız PlacesClient.findCurrentPlace() kullanmıyorsa manifest'inize aşağıdakileri ekleyerek kitaplık tarafından kullanıma sunulan ACCESS_FINE_LOCATION ve ACCESS_COARSE_LOCATION izinlerini 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>

Başlamak için izinler hakkında daha fazla bilgi edinin ve EasyPermissions özelliğini kullanın.

Geçerli konumu alma

Yerel işletmeyi veya cihazın şu anda bulunduğu başka bir yeri bulmak için aşağıdaki adımları uygulayın:

  1. Kullanıcının, cihaz konumuna erişim izni verip vermediğini kontrol etmek için ContextCompat.checkSelfPermission numaralı telefonu arayın. Uygulamanız ayrıca kullanıcıdan izin istemek ve sonucu işlemek için kod da içermelidir. Ayrıntılar için Uygulama İzinleri İsteme bölümüne bakın.
  2. Uygulamanızın istemesi gereken yer verisi türlerini belirterek List/Place.Field ileterek bir FindCurrentPlaceRequest oluşturun.
  3. Bir önceki adımda oluşturduğunuz FindCurrentPlaceRequest kodunu kullanarak PlacesClient.findCurrentPlace() numaralı telefonu arayın.
  4. FindCurrentPlaceResponse kaynağından PlaceLikelihood listesini alın.

Alanlar, Rehber Arama sonuçlarına karşılık gelir ve üç faturalandırma kategorisine ayrılır: Temel, Kişi ve Atmosfer. Temel alanlar taban ücretten faturalandırılır ve ek ücret ödemez. Kişi ve Atmosfer alanları daha yüksek ü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 bölümüne bakın.

API, Task içinde bir FindCurrentPlaceResponse döndürür. FindCurrentPlaceResponse, cihazın bulunabileceği yerleri temsil eden PlaceLikelihood nesnelerinin bir listesini içerir. Sonuçta her bir yer için doğru yerin doğru olma olasılığına dair bir gösterge bulunur. Belirtilen cihaz konumuna karşılık gelen bilinen bir yer yoksa liste boş olabilir.

Bir Place nesnesini almak için PlaceLikelihood.getPlace() ve yerin olasılık derecelendirmesini almak için PlaceLikelihood.getLikelihood() yöntemini çağırabilirsiniz. Değer yükseldikçe yerin en iyi eşleşme olma ihtimali de artar.

Aşağıdaki kod örneği, cihazın bulunma olasılığının en yüksek olduğu yerlerin listesini alıp her bir yerin adı ile 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, yerin tek bir istek için döndürülen yerler listesindeki en iyi eşleşme olduğuna dair göreli bir olasılık 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 ihtimalini% 55, B yeri olma ihtimalini ise% 35 olarak temsil etmek için yanıtın iki üyesi vardır.

İlişkilendirmeleri uygulamanızda gösterme

Uygulamanız PlacesClient.findCurrentPlace()'ten alınan bilgileri görüntülediğinde, ilişkilendirmeleri de göstermelidir. İlişkilendirmeler ile ilgili dokümanlara bakın.