Mevcut Yer

Android için Yerler SDK'sını kullanarak, cihazın şu anda bildirdiği konumdaki yeri keşfedebilirsiniz. Yerlere örnek olarak yerel işletmeler, ilgi çekici yerler ve coğrafi konumlar verilebilir.

İzinler

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

Uygulamanız PlacesClient.findCurrentPlace() kullanmıyorsa aşağıdakileri manifest dosyanıza ekleyerek kitaplık tarafından 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>

İzinler hakkında daha fazla bilgi edinin ve başlamak için EasyPermissions'i kullanmayı düşünün.

Mevcut 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:

  1. Kullanıcının cihaz konumuna erişme izni verip vermediğini kontrol etmek için ContextCompat.checkSelfPermission işlevini çağırın. Uygulamanız, kullanıcıdan izin isteyecek ve sonucu işleyebilecek kod da içermelidir. Ayrıntılar için Uygulama İzinleri İsteme başlıklı makaleyi inceleyin.
  2. Uygulamanızın istemesi gereken yer veri türlerini belirten bir List Place.Fields ileterek bir FindCurrentPlaceRequest oluşturun.
  3. Önceki adımda oluşturduğunuz FindCurrentPlaceRequest değerini göndererek PlacesClient.findCurrentPlace() işlevini çağırın.
  4. FindCurrentPlaceResponse'ten PlaceLikelihood 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 fiyat ü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 verileri isteklerinin nasıl faturalandırıldığı hakkında daha fazla bilgi için Kullanım ve Faturalandırma başlıklı makaleyi inceleyin.

API, Task içinde bir FindCurrentPlaceResponse döndürür. FindCurrentPlaceResponse, cihazın bulunduğu muhtemel yerleri temsil eden PlaceLikelihood nesnelerinin listesini içerir. Her konum için sonuçta, konumun doğru olma olasılığı belirtilir. Belirtilen cihaz konumuna karşılık gelen bilinen bir yer yoksa liste boş olabilir.

Bir Place nesneyi almak için PlaceLikelihood.getPlace() ve yerin olasılık derecesini almak için PlaceLikelihood.getLikelihood() işlevini ç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 bulunduğu en olası yerlerin listesini alır ve her yerin adını ve olasılığını günlüğe kaydeder.

KotlinJava
// 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()
}

      
// 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 yerle en iyi eşleşme olma olasılığını gösterir. Farklı isteklerdeki olasılıkları karşılaştıramazsınız.
  • Olasılık değeri 0,0 ile 1,0 arasında olacaktır.

Örneğin, doğru yerin A Yeri olma olasılığının% 55, B Yeri olma olasılığının ise% 35 olduğunu temsil etmek için yanıtta iki öğe bulunur: 0, 55 olasılığa sahip A Yeri ve 0,35 olasılığa sahip B Yeri.

Uygulamanızda ilişkilendirmeleri gösterme

Uygulamanız PlacesClient.findCurrentPlace() kaynağından elde edilen bilgileri görüntülediğinde ilişkilendirmeleri de görüntülemelidir. İlişkilendirmeler ile ilgili dokümanları inceleyin.