Android Google Places API Entegrasyonu

Lokasyon ve harita bazlı uygulamalarda harita ile etkileşim gerektiren, yer arama, bulunduğun yeri işaretleme ve etrafındaki yerleri arama gibi işlemler bir miktar sıkıntılı olmuştur. Google burayı daha sorunsuz hale getirmek adına Play Services 7.0 ile Google Places API’sini biz sevgili geliştiricilerinin kullanımına sundu. Temel olarak Places API’nin getirdiklerini şöyle sıralayabiliriz :

  • Place Picker : Places API ile birlikte gelen Place Picker UI elemanı içerisinde yerleşik olarak Google Maps’i barındırıyor. PlacePicker ile kullanıcınıza şuanki lokasyonunu ve etrafındaki yerleri harita üzerinde gösterip, harita üzerinde herhangi bir lokasyon seçmesini sağlayabilirsiniz.
  • Anlık Konum – PlaceDetectionApi.getCurrentPlace() : Places API ile birlikte kullanıcının anlık konumunu ve etrafında olabilecek yerlerin listesini edinebilirsiniz.
  • Otomatik Tamamlama : Kullanıcının yazmaya başladığı kelime ile ilgili olası yerleri kullanıcıya göstererek seçim yapmasını sağlayabilirsiniz.

Bu ana işlemler dışında Places API ile yerler hakkında ayrıntılı bilgi (isim, adres, lokasyon, id, fotoğraf, vb) çekebilir, yeni yer ekleyebilir veya raporlayabilirsiniz. Görüldüğü gibi kullanıcıdan veri alınırkenki hata payının düşürülmesi üzerine gayet kullanışlı ve yaşanan çoğu probleme çözüm getiriyor.

Ben bu yazımda Places API’nin Place Picker, anlık konum ve otomatik tamamlama özelliklerini nasıl kullanacağımız üzerinde duracağım. Bunun için oluşturduğum örnek projeyi GitHub‘dan inceleyebilirsiniz.

Place Picker

Place Picker gömülü olarak içerisinde Google Maps’i barındıran ve hemen altında kullanıcının etrafındaki yerlerin listesini gösteren UI elemanıdır. Place Picker ile kullanıcı

*   Anlık konumunu ve etrafındaki yerleri görüntüleyebilir.

*   Harita ile etkileşimde bulunup harita üzerinde istediği lokasyonu ve etrafındaki yerleri seçebilir.

*   Arama çubuğu ile yer arayarak harita üzerinde görüntüleyebilir.

Basit ve kolay kullanılabilir arayüzü ile kullanıcıdan alınacak olan lokasyon bilgisindeki hatayı minimuma indirmekte ve kullanıcıya esnek bir arayüz sağlamaktadır. Tüm bu harita ve lokasyon işlemleri kendimizin geliştirdiğini düşündüğümüzde geliştirme zamanını da ciddi miktarda azaltmaktadır.

Peki Place Picker’ı uygulamamıza nasıl entegre ederiz ?

Place Picker’ı uygulamanıza eklemeden önce Google Places API’yi kullanabilmeniz için yapmanız gereken işlemler var. Bu hem Place Picker hem de diğer özellikler için geçerli gereklidir.

İlk yapmamız gereken işlem olarak Google geliştirici konsolundan uygulamanız için Android API key oluşturmanız ve aşağıdaki gibi AndroidManifest.xml dosyanızda belirtmeniz gerekiyor.

Ardından tabiki google-playservices-places  kütüphanesini dependency olarak build.gradle dosyanıza eklemelisiniz.

Place picker için gerekli olan ACCESS_FINE_LOCATION iznini ekledikten sonra artık kod kısmına geçebilirsiniz.

Benim uygulamamda PlacePickerSampleActivity sınıfımın içindeki butona tıklandığında Place Picker açılıyor ve kullanıcı yer seçimini yaptıktan sonra ekranda textview olarak adresi ve yerin ismini yazıyor.

Place Picker ekranını açmak için  PlacePicker.IntentBuilder  oluşturarak startActivityForResult() methoduna parametre olarak veriyoruz. startActivityForResult() methodunu çağırdığınızda yeni place picker yeni bir activity başlatır ve kullanıcı o ekran üzerinde yer seçimini yapar.

Builder’ın setLatLngBounds() methodunu kullanarak başlangıç lokasyonunu değiştirebilirsiniz, aksi halde varsayılan olarak cihazın anlık lokasyonunu gösterecektir.

 

Place Picker ekranında kullanıcı yer seçimini yaptıktan sonra ekran kapanır ve çağırdığınız activity sınıfının onActivityResult()  methodu tetiklenir. Dönen Intent objesini kullanarak seçilen yerle ilgili bilgileri edinebilirsiniz.

Burda dikkat etmeniz gereken nokta, kullanıcı Google Maps üzerinde daha önce tanımlanmamış, rasgele bir lokasyon seçtiğinde isim, address, id gibi değerlere ulaşamayacaksınız. Sadece latitude ve longitude olarak elde edebilirsiniz.

Anlık konum – Etrafımdaki Yerler

Places API ile PlacesDetectionApi.getCurrentPlace() methodunu çağırarak kullanıcının etrafındaki yerlerin listesini alabilirsiniz. Google yer bilgilerine benzerlik (likelihood) oranını da ekleyerek dönüyor. Benzerlik oranı 0 ile 1.0 arasında bir değer olarak dönüyor ve sizin kendi kullanım durumunuza göre yorumlamanızı sağlıyor.

getCurrentPlace() methodunu kullanmadan önce GoogleApiClient örneğini oluşturmanız ve GoogleApiClient.OnConnectionFailedListener arayüzünü implemente etmeniz gerekiyor.

Ardından  getCurrentPlace() çağırarak yer listesini alıyoruz. Method parametre olarak GoogleApiClient ve PlaceFilter alıyor. Eğer dönecek olan yer listesinde bir filtreleme yapmak isterseniz PlaceFilter objesi oluşturarak methoda vermeniz gerekiyor.

getCurrentPlace() methodunu çağırırken lokasyon izin kontrollerine de dikkat etmeniz gerekiyor. Burda sadece method kullanımına odaklandığım için kod örneğinde ona yer vermedim ama tamamını Github’daki projeden inceleyebilirsiniz.

Place Autocomplete

Place autocomplete ile kullanıcı arama yaparken ilgili sonuçları göstererek seçim yapabilmesini sağlıyor. Aslında Place Picker içerisinde Place Autocomplete servisini kullanıyoruz. Herhangi bir ekranda autocomplete servisini kullanmak için activity sınıfınıza PlaceAutocompleteFragment eklemeniz gerekiyor.

PlaceSelectionListener ile de kullanıcının yaptığı seçimleri yönetebilirsiniz.

Google Places API Kullanım Limiti

Places API sorguları için her uygulamanın günlük 1000 sorgu için izni var, bu sınır aşıldığında uygulamanız hata vermeye başlayabilir. Eğer bu limit uygulamanız için az ise ücretli versiyonlarına geçerek kullanıma devam edebiliriz. Place Picker kullanımı bu limite bağlı olmamakla birlikte diğer tüm sorguların toplamı günlük olarak 1000’i geçmemelidir.

Benim Places API kullanımım bir üniversite projesi için olmuştu, çok hızlı ve kolay bir şekilde lokasyon bazlı özellikleri tamamlayabilmiştim. Bu yazıdaki örnek projeyi de https://github.com/busradeniz/android_places_api_sample linkinden edinebilirsiniz.

Leave a reply:

Your email address will not be published.

Site Footer