Android Runtime Permissions – Kotlin

Merhaba sevgili android geliştiricileri. Bu yazımda sizlere runtime permission yani yeni sayılabilecek bir izin sisteminden bahsedeceğim. Android 6 (API 23) öncesi uygulamayı yüklemeden önce google play bize önce uygulamanın kullandığı izinleri sonrada kabul ediyorsan yükle anlamına gelen ‘Yükle’ butonunu gösteriyordu.

Eğer uygulamadaki ‘A’ özelliği için indirdiysek ve ‘A’ özelliği internet bile gerektirmiyorken uygulama ‘B’ ve ‘C’ özelliklerini de kullanacak gibi telefonumuzu uygulamaya göre hazırlıyor dosyalar oluşturuyor yada dosyalarımızı, resimlerimizi videolarımızı görebiliyordu. Kısacası biz geliştiriciler için ‘İşine Gelirse’ dediğimiz bu yöntem Android 6 ile birlikte imkansız hale geldi.

Runtime Permissions

Android 6 sonrası uygulamayı telefona kuruyoruz. İzin gereken yerde kullanıcıdan izin istiyoruz. Örneğin Instagramı indirip kurun telefonunuza. Story yada Paylaşım yapmadan önce sizden dosya izni istemez. Çünkü bu izni sadece sizin istediğiniz(story, paylaşım) özellikleri için kullanacağını söyler. Eğer daha login olmadan dosya izni, resim çekme, video çekme ve ses kaydetme gibi izinleri isteseydi kullanıcılar çekinir ve aklında sorular olurdu.

Tabi bu izinler tüm izinler için geçerli değil. Örneğin internet bağlantısı için kullanıcıdan özel izin istemiyoruz. İnternete bağlı olması yeterli. Ama Sms gönderme, Arama yapma, Dosyaları okuma/yazma gibi özellikler için izin istememiz gerekiyor. Aksi halde bu özellikleri kullanamıyoruz.

Kullanımı

Öncelikle tüm izinler gibi izni AndroidManifest.xml dosyamıza ekliyoruz.

Ardından izni daha önce almış mıyız kontrol ediyoruz.

if (ContextCompat.checkSelfPermission(this@MainActivity, Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED){
    //İzin daha önce alınmış. arama iznini kullanabiliriz.
} else {
    //izin isteyeceğimiz yer burası
}

Eğer izin alındıysa izni kullanabiliriz ama izin alınmadıysa izni istememiz gerekiyor. Peki nasıl?

İzin İsteme

if (ActivityCompat.shouldShowRequestPermissionRationale(this@MainActivity, Manifest.permission.CALL_PHONE)){
    //Uygulama izni açıldıktan sonra eğer kullanıcı bunu reddederse ikinci defa izin almadan önce burada bir dialog göstermek gerekebilir.
    //Sebebi istenen iznin kullanıcı için zararlı olmadığını anlatmaktır.
} else {
    //İzni istiyoruz
    ActivityCompat.requestPermissions(this@MainActivity, arrayOf(Manifest.permission.CALL_PHONE), 1)
}

İzni istedikten sonra işler henüz bitmiyor. ‘onRequestPermissionsResult()‘ metodu ile izni alıp almadığımızı kontrol ediyoruz.

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    when(requestCode){
        permissionRequestCode -> {
            if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                //Eğer cevap listesi boş değilse ve gelen değer izin alınma değeri ise iznimizi aldık.
                //İşlemleri gerçekleştirebiliriz.
            } else{
                //Değilse malesef izni alamamış oluyoruz. Bu durumda kullanıcıdan yeniden izin isteyeceğimiz için
                //yeni dialog bu durumda çok önemli oluyor.
            }
        }
    }
}

Bu yazıda android runtime permissions konusuna yer verdik. Soru, görüş ve önerileriniz için lütfen yorum yapmayı unutmayın.

Photo of author

Mehmet Kurtgöz

Android Developer.

Yorum yapın