Android FusedLocationClient İle Konum Bulma

Selamlar,

Google’ın son çıkardığı diğer bir yenilik olan FusedLocationClient ile konum nasıl bulunur buna bakacağız.

Adım: 1 – Konum İzni Alma

Öncelikle kullanıcıdan konumunu bulabilmek için izin isteyelim.

Ben izinler için 3th party bir kütüphane kullanıyorum. Adı AndPermission.

Eğer siz de bu kütüphane ile izin yönetecekseniz deneyebilirsiniz. Aşağıdaki gibi kullanımı var.

def permission = "2.0.3"
implementation "com.yanzhenjie:permission:$permission

Kullanımı da çok basit. Bu kod örneği ile konum izni isteyebilirsiniz.

AndPermission.with(this)   
.runtime()   
.permission(Permission.Group.LOCATION)   
.onGranted( permissions -> {    
       // Storage permission are allowed.  
 })  
 .onDenied(permissions -> {     
      // Storage permission are not allowed.  
 })  
.start();

this: Context

onGranted: Eğer kullanıcı konum iznini kabul ederse

onDenied: Eğer kullanıcı konum izni vermeyi kabul etmez ise

Adım 2- Konum Bulma

Konum bulmak için başlıkta da belirttiğim gibi FusedLocationProvideClient kullanacağız.

Activity ya da fragment class’ımızda global değişken olarak şunları ekleyelim

class SetupFragment : BaseFragment() {
    private var fusedLocationClient: FusedLocationProviderClient? = null
    private var locationRequest: LocationRequest? = null

...
}

onCrate içerisine bu değişkenlerini initialize edelim

fusedLocationClient = LocationServices.getFusedLocationProviderClient(it)
locationRequest = LocationRequest.create()
locationRequest?.priority = LocationRequest.PRIORITY_HIGH_ACCURACY
locationRequest?.setInterval(20 * 1000)

Şimdi ise konum bilgilerini çekebiliriz.

private fun getLastKnownLocation() {
    context?.let { context ->
        // Konum izni kontrolü
        if (ActivityCompat.checkSelfPermission(
                context,
                Manifest.permission.ACCESS_FINE_LOCATION
            ) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(
                context,
                Manifest.permission.ACCESS_COARSE_LOCATION
            ) != PackageManager.PERMISSION_GRANTED
        ) {
            return
        }
        // Konum bilgileri
        fusedLocationClient?.lastLocation
            ?.addOnSuccessListener { location ->
                if (location != null) {
                    try {
                         // burada konum bilgilerini çekebiliriz
                         // ör: location.latitude ya da location.longitude
                    } catch (e: Exception) {
                        Timber.e(e)
                    }
                }
            }
            ?.addOnFailureListener {
                Timber.e(it)
            }
    }
}

fusedLocationClient?.lastLocation ile kullanıcının konumu çekebiliriz. Eğer başarılı bir şekilde konumu alabilirsek addOnSuccessListener hatalı olarak alırsak da addOnFailureListener callbacklerine düşer.

Başarılı olarak aldığımızda location değişkenimiz içerisinden istediğimiz konum verisini alabiliriz.

fusedLocationClient?.lastLocation kodundan önceki kod parçası, konum izni alınıp alınmadığını kontrol etmek için Android SDK tarafından otomatik olarak ekleniyor.

Hepsi bu.

Takıldığınız yer olursa aşağıda yorum olarak sorabilirsiniz.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir