Kişiselleştirilmiş ve Kolaylaştırılmış Android İzinleri

Berk Özyurt
Huawei Developers - Türkiye
3 min readDec 26, 2021

Herkese merhaba,

Bu yazımda sizlere Android’teki izin kavramından bahsedip, bu izinleri nasıl kişiselleştirip, kullanımını nasıl daha kolay bir hale getirebileceğinize dair bir örnek paylaşacağım. Bu makalenin izinler konusunda tüm Android geliştiricilere faydalı olacağını umuyorum.

Android İzinleri Nedir?

İzinler, bir Android uygulamasında bazı özellikleri kullanmak için alınması gereken bir tür kullanıcı onayıdır. En yaygın özellikler ise konum ve kamera izinleridir.

Bazı senaryolar bir android uygulamasında herhangi bir izne ihtiyaç duymazken, bazı senaryolar ise kullanıcı izni olmadan gerçekleştirilemez.

Açıkçası izinler konusunda çok fazla açıklamaya gerek yok. Lafı fazla uzatmadan izinlerinizi nasıl özelleştirebileceğimizden bahsetmek istiyorum.

Kendi özelleştirilmiş izin yapınızı oluşturmak için sadece 2 sınıfa ihtiyacınız var. Birinci sınıfta izinleri tanımlayacaksınız, ikinci sınıfta ise izinlerinizi yöneteceksiniz. Bu iki sınıf sayesinde uygulamanın herhangi bir yerinde istediğiniz izinleri kolayca alabilirsiniz.

Geliştirme Süreci

1. AndroidManifest.xml’e İzinleri Ekleyin

Öncelikle, uygulamaya gerekli izinleri tanımlamanız gerekir. Bunun için AndroidManifest.xml dosyasındaki izinleri aşağıdaki gibi tanımlayın. Burada siz kendi uygulamanız için gerekli izinleri ekleyebilirsiniz. Ben yalnızca birkaç örnek paylaştım.

2. Permission Sınıfını Oluşturun
Bu sınıfta, uygulamanızın ihtiyaç duyduğu izinleri tanımlamanız gerekir.
Örneğin, X ara yüzünde WRITE_EXTERNAL_STORAGE ve ACCESS_FINE_LOCATION izinleri gerektiriyorsa, X adında bir nesne oluşturmalı ve WRITE_EXTERNAL_STORAGE, ACCESS_FINE_LOCATION izinlerini parametre olarak vermelisiniz.

object XPermissions : Permission(WRITE_EXTERNAL_STORAGE, ACCESS_FINE_LOCATION)

Veya sadece kamera iznine ihtiyacınız varsa, Camera adında bir nesne oluşturabilir ve parametre olarak “CAMERA” değerini set edebilirsiniz.

object Camera : Permission(CAMERA)

Başka bir örnekte ise, sadece depolama izinlerine ihtiyacınız varsa, yeni bir nesne oluşturabilir ve parametreleri WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE olarak set edebilirsiniz.

object Storage : Permission(WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE)

Ardından, bir companion object oluşturun ve burada, parametreler ve adlarla tüm izinleri almak ve tanımlamak için bir method oluşturun.
Son olarak, Permission sınıfı şöyle görünmelidir:

3. PermissionManager Sınıfını Oluşturun

PermissionManager sınıfı sayesinde izin durumunu kontrol edebilir, izin isteyebilir, izin talebini işleyebilir, tüm izinleri temizleyebilir, izin listesini alabilir, izin talebi metninizi ayarlayabilir ve özelleştirilmiş izin talep pencerenizi gösterebilirsiniz.

Bu sınıf hakkında söylenecek çok fazla söz yok açıkçası. Bu sınıftaki tüm kodlar klasik izin takibi prosedürlerinden oluşuyor. Dediğim gibi bu sınıfı sadece yukarıdaki işlemleri tanımlamak için kullanacağız ve onları activity/fragment içinde çağıracağız.

PermissionManager sınıfınız şöyle görünmelidir:

4. Activity/Fragment İçinde İzin İsteme

İlk olarak bir PermissionManager nesnesi oluşturun.

private val permissionManager = PermissionManager.from(this)

Şimdi request parametreniz(Alacağınız izin türünü içermeli) ve açıklamanız ile permissionManager sınıfını çağırın ve izinlerin alınıp alınmadığını kontrol edin. İzin verilmişse işlemlerinizi gerçekleştirin. Eğer izin verilmemişse, kullanıcılara bu durumu bildirin.

Bu yapının en önemli özelliği, izinlerin alınıp alınmadığını anında görebilmenizdir. Geleneksel yöntemlerle — özellikle konum izinleri için — bu bir sorun olabilir. Konum servisleri her zaman hızlı çalışamayacağı için izin aldıktan sonra, ikinci bir kontrol yapmanız gerekebilir. Ancak özelleştirilmiş izinler sayesinde artık izinlerin alınıp alınmadığını anında kontrol edebileceksiniz.

Örnek kodu aşağıda görebilirsiniz:

Sonuç

İpuçları

  • Yalnızca bir kere tanımladığınız izinleri, uygulamanın bir çok yerinde kolaylıkla kullanabilirsiniz.
  • Daha temiz ve kullanışlı bir ara yüz oluşturduğunuz için kullanıcı deneyiminde ciddi bir artış ve memnuniyet görebilirsiniz.

--

--