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:
- 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. - Uygulamanızın istemesi gereken yer veri türlerini belirten bir
List
Place.Field
s ileterek birFindCurrentPlaceRequest
oluşturun. - Önceki adımda oluşturduğunuz
FindCurrentPlaceRequest
değerini göndererekPlacesClient.findCurrentPlace()
işlevini çağırın. FindCurrentPlaceResponse
'tenPlaceLikelihood
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.
// 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.