Mevcut Yer (Eski)

Avrupa Ekonomik Alanı'ndaki (AEA) geliştiriciler

Android için Yerler SDK'sını kullanarak cihazın mevcut konumundaki yeri keşfedebilirsiniz. Yerlere örnek olarak yerel işletmeler, önemli noktalar 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 izinleri istemeniz gerekir.

Uygulamanız PlacesClient.findCurrentPlace() kullanmıyorsa manifest dosyanıza aşağıdakileri 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'ı 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şim izni verip vermediğini kontrol etmek için ContextCompat.checkSelfPermission yöntemini ç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 İsteme başlıklı makaleyi inceleyin.
  2. Uygulamanızın istemesi gereken yer verisi türlerini belirten Place.Field saniyelik bir List ileterek FindCurrentPlaceRequest oluşturun.
  3. Önceki adımda oluşturduğunuz FindCurrentPlaceRequest değerini ileterek PlacesClient.findCurrentPlace() yöntemini çağırın.
  4. FindCurrentPlaceResponse sayfasından PlaceLikelihood listesini alın.

Alanlar, Yer Arama sonuçlarına karşılık gelir ve üç faturalandırma kategorisine ayrılır: Temel, İletişim ve Atmosfer. Temel alanlar, taban ücret üzerinden faturalandırılır ve ek ücret alınmaz. İletişim 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, 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ç, yerin doğru yer olma olasılığının bir göstergesini içerir. Belirtilen cihaz konumuna karşılık gelen bilinen bir yer yoksa liste boş olabilir.

Bir Place nesnesi almak için PlaceLikelihood.getPlace() yöntemini, yerin olasılık puanını almak için ise 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 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)

// Define the search area around the current location (500m radius).
val currentLocation = LatLng(37.4220, -122.0841)
val circle = CircularBounds.newInstance(currentLocation, 500.0)
val request = SearchNearbyRequest.builder(circle, placeFields)
    .setMaxResultCount(20)
    .build()

// Call searchNearby and handle the response (first check that the user has granted permission).
if (ContextCompat.checkSelfPermission(this, permission.ACCESS_FINE_LOCATION) ==
    PackageManager.PERMISSION_GRANTED
) {
    placesClient.searchNearby(request).addOnSuccessListener { response ->
        binding.progressBar.visibility = View.GONE
        adapter.setPlaces(response.places)
    }.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);

// Define the search area around the current location.
LatLng currentLocation = new LatLng(37.4220, -122.0841);
LocationRestriction circle =
        CircularBounds.newInstance(currentLocation, /* radius= */ 500.0);

// Use the builder to create a SearchNearbyRequest.
SearchNearbyRequest request =
        SearchNearbyRequest.builder(circle, placeFields).setMaxResultCount(20).build();

// Call searchNearby and handle the response (first check that the user has granted
// permission).
if (ContextCompat.checkSelfPermission(this, ACCESS_FINE_LOCATION)
        == PackageManager.PERMISSION_GRANTED) {
    Task<SearchNearbyResponse> placeResponse = placesClient.searchNearby(request);
    placeResponse.addOnCompleteListener(
            task -> {
                binding.progressBar.setVisibility(View.GONE);
                if (task.isSuccessful()) {
                    SearchNearbyResponse response = task.getResult();
                    adapter.setPlaces(response.getPlaces());
                } 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 en iyi eşleşmenin yer 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 olur.

Örneğin, doğru yerin A yeri olma olasılığının% 55, B yeri olma olasılığının% 35 olduğunu göstermek için yanıtta iki üye bulunur: 0, 55 olasılıkla A yeri ve 0,35 olasılıkla B yeri.

Uygulamanızda ilişkilendirmeleri gösterme

Uygulamanız PlacesClient.findCurrentPlace()'dan elde edilen bilgileri gösterdiğinde ilişkilendirmeleri de göstermelidir. Atıflar ile ilgili belgelere göz atın.