Android'de Permission Group — nedir, izin grupları ve çalışma prensibi

Yazar: IT Sectr Yayınlanma: 2026-05-20 Okuma süresi: 8 dk

Permission Group, Android'de işlevsel olarak ilişkili tehlikeli izinleri tek bir mantıksal kategoride birleştiren bir izin gruplama mekanizmasıdır. Android Permissions Overview, 2024'e göre, izin grupları kullanıcı arayüzünü basitleştirir: kullanıcı bir gruptan bir izin verdiyse, diğerleri ek diyaloglar olmadan otomatik olarak verilir. Bu, istek sayısını azaltır ve UX'i iyileştirir.

Önemli Noktalar

  • Permission Group — işlevsel olarak ilişkili tehlikeli Android izinlerini gruplayan bir kategori.
  • Bir gruptan bir izin vermek, diğerlerini otomatik olarak ek diyalog olmadan verir.
  • Gruplar yalnızca tehlikeli izinler için kullanılır — normal izinler gruplanmaz.
  • Sistem grupları: CAMERA, LOCATION, MICROPHONE, PHONE, CONTACTS, SMS, STORAGE, CALENDAR.
  • Gruplar cihazda /etc/permissions/ içinde tanımlanır ve geliştirici tarafından oluşturulamaz.

Android'de Permission Group Nedir

Permission Group, birden çok tehlikeli izni işlevsel amaçlarına göre bir grupta birleştiren bir Android sistem mekanizmasıdır. Her grubun bir dize tanımlayıcısı vardır, örneğin android.permission-group.CAMERA veya android.permission-group.LOCATION. Bir grup içindeki tüm izinler mantıksal olarak ilişkilidir ve cihazın ilgili işlevlerine erişim sağlar.

İzin grupları, Android 6.0 Marshmallow ile birlikte çalışma zamanı izin modeliyle ortaya çıktı. Temel amaçları, kullanıcı etkileşimini basitleştirmektir: her bir izin için bir dizi diyalog yerine, sistem grup başına bir diyalog gösterir. Kullanıcı bir gruptan bir izin verirse, diğerleri otomatik olarak onaylanmış sayılır. Android UX Research (2015)'e göre, bu, ilk başlatmada reddetme sayısını yüzde 20 oranında azalttı.

Geliştiricinin kendi Permission Group'larını oluşturamayacağını anlamak önemlidir. Gruplar, işletim sistemi düzeyinde önceden tanımlanmıştır ve her cihazdaki permissions.xml dosyalarında açıklanmıştır. Uygulama yalnızca uses-permission bildirir ve sistem, protectionLevel ve AOSP'deki kategorizasyona göre izni otomatik olarak grubuyla eşler.

Sistem grubu nasıl belirler

Bir iznin bir grupla eşleştirilmesi, sistem izin tanımındaki permissionGroup özniteliği aracılığıyla gerçekleşir. Örneğin, CAMERA permissionGroup="android.permission-group.CAMERA" ile, ACCESS_FINE_LOCATION ise permissionGroup="android.permission-group.LOCATION" ile bildirilir. Bu eşleme, Android Open Source Project kodunda sabit kodlanmıştır ve tüm sertifikalı cihazlarda aynıdır.

Permission Group Nasıl Çalışır

Grup mekanizması “grup başına bir diyalog” ilkesine göre çalışır. Bir uygulama ilk kez tehlikeli bir izin talep ettiğinde, sistem Permission Group'unu kontrol eder. Bu gruptan henüz hiçbir izin verilmemişse — bir diyalog gösterilir. Onaydan sonra, sistem tüm grubu verilmiş olarak işaretler ve aynı gruptaki diğer izinler için sonraki talepler kullanıcı arayüzü olmadan karşılanır.

Basitleştirilmiş algoritma şöyle görünür:

  • Uygulama, ACCESS_FINE_LOCATION için requestPermissions çağırır
  • Sistem grubu belirler — android.permission-group.LOCATION
  • LOCATION grubunun daha önce verilip verilmediğini kontrol eder
  • Verilmemişse — grup adı ve dahil edilen izinlerin listesiyle bir diyalog gösterir
  • Allow'dan sonra — tüm LOCATION grubu verilmiş sayılır
  • ACCESS_COARSE_LOCATION artık ek talep olmadan kullanılabilir

Bu mekanizma yalnızca tehlikeli izinler için geçerlidir. Normal izinlerin grupları yoktur ve bu mantığa katılmazlar. Ayrıcalıklı ve imzalı izinler de gruplanmaz — bunların ayrı bir erişim kontrol sistemi vardır.

Grup mantığının sınırlamaları

Gruplar “ters yönde” çalışmaz: ayarlar aracılığıyla bir gruptan bir izni iptal etmek, diğerlerini etkilemeden yalnızca o izni iptal eder. Ayrıca, kullanıcı bir grubun diyalogunu reddederse, bu diğer grupları engellemez — farklı bir gruptaki her yeni izin kendi diyalogunu gösterir. Permission Group yalnızca talep UX'ini etkiler, güvenlik modelini etkilemez.

Android'de Permission Group Listesi

Android, tehlikeli izinler için aşağıdaki sistem Permission Group'larını tanımlar. Her grup, ortak bir işlevsel amaçla birleştirilmiş bir veya daha fazla izin içerir.

Grup TanımlayıcısıGruptaki İzinlerAçıklama
CAMERACAMERACihaz kamerasına erişim
LOCATIONACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATIONCoğrafi konum (kesin ve yaklaşık)
MICROPHONERECORD_AUDIOMikrofon aracılığıyla ses kaydı
PHONEREAD_PHONE_STATE, CALL_PHONE, READ_CALL_LOG, WRITE_CALL_LOG, ADD_VOICEMAIL, USE_SIPTelefon işlevleri
CONTACTSREAD_CONTACTS, WRITE_CONTACTS, GET_ACCOUNTSKişilere ve hesaplara erişim
SMSREAD_SMS, SEND_SMS, RECEIVE_SMS, RECEIVE_WAP_PUSH, RECEIVE_MMSSMS gönderme ve alma
STORAGEREAD_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGEHarici depolamayı okuma ve yazma
CALENDARREAD_CALENDAR, WRITE_CALENDARTakvime erişim
SENSORSBODY_SENSORSVücut sensörleri (kalp atış hızı ve diğerleri)
ACTIVITY_RECOGNITIONACTIVITY_RECOGNITIONFiziksel aktivite tanıma

Yeni sürümlerdeki değişiklikler

Android 13'te (API 33), BLUETOOTH_SCAN, BLUETOOTH_CONNECT ve BLUETOOTH_ADVERTISE'i birleştiren yeni bir NEARBY_DEVICES grubu ortaya çıktı. Ayrıca, STORAGE grubu kısmen medya izinleri READ_MEDIA_IMAGES, READ_MEDIA_VIDEO ve READ_MEDIA_AUDIO ile değiştirildi; bunlar STORAGE'ın parçası değil, gruplandırma olmadan bağımsız tehlikeli izinlerdir.

Özel izin grupları

Geliştiriciler, manifest dosyasındaki permissionGroup özniteliği aracılığıyla özel Permission Group'larla kendi izinlerini bildirebilirler. Ancak bu, yalnızca aynı uygulamanın özel izinleri için çalışır ve sistem arayüzü diyaloglarını etkilemez. Pratikte, özel Permission Group'lar nadiren kullanılır — aynı yığındaki uygulamalar arasındaki etkileşim için.

Permission Group ve UX

Permission Group'un etkisi kullanıcı deneyimi üzerinde önemlidir. Gruplama sayesinde, kullanıcı farklı izinler için 8 ayrı diyalog değil, birkaç grup diyalogu görür. Bu, bilişsel yükü azaltır ve kullanıcının amacını anlamadan kritik bir izni reddetme olasılığını düşürür.

UX araştırmaları, grup diyaloglarının kullanıcılar tarafından daha şeffaf algılandığını göstermektedir. Bir uygulama “kameraya erişim izni” talep ettiğinde, kullanıcı bağlamı anlar. Her izin ayrı ayrı talep edilseydi — CAMERA, CAMERA2, FLASHLIGHT — bu, fazlalık izlenimi yaratırdı. Permission Group bu ayrıntı düzeyini soyutlar.

En iyi uygulama, izinleri yalnızca bir seferde bir gruptan talep etmektir. Bir uygulamanın hem kameraya hem de konuma ihtiyacı varsa, bunları tek bir requestPermissions çağrısında talep etmeyin. Önce bir grubu neden gerekli olduğunu açıkladıktan sonra talep edin, ardından ikinciyi. Bu, kullanıcıya kontrol ve her işlev hakkında sıralı bir anlayış sağlar.

Permission Group vs ProtectionLevel

Permission Group ve ProtectionLevel, Android izin sisteminin iki farklı boyutudur. ProtectionLevel, bir iznin nasıl verildiğini (normal, dangerous, signature, privileged) belirlerken, Permission Group, kullanıcı arayüzünde görüntüleme için bir kategoridir. Bağımsızdırlar, ancak pratikte dangerous + permission group kombinasyonu en yaygın olanıdır.

Aynı ProtectionLevel'daki izinler farklı gruplara ait olabilir. Örneğin, ACCESS_FINE_LOCATION ve CAMERA'nın her ikisi de protectionLevel dangerous'a sahiptir ancak farklı gruplara — LOCATION ve CAMERA — aittir. Tersine, aynı ada sahip izinler her zaman aynı gruba aittir: ACCESS_FINE_LOCATION ve ACCESS_COARSE_LOCATION'ın her ikisi de LOCATION'dadır.

Daha yüksek düzeydeki koruma seviyeleri — signature ve privileged — kullanıcı arayüzü için Permission Group kullanmaz. Bunların verilmesi sistem düzeyinde kontrol edilir: signature, sistemle aynı sertifikayla imzalanmış uygulamalara, privileged ise sistem görüntüsündeki uygulamalara verilir. Bu tür izinler için gruplar mevcuttur ancak UX diyaloglarını etkilemez çünkü bu diyaloglar görünmez.

Kodda Permission Group Kontrolü

Geliştirici, PackageManager aracılığıyla herhangi bir iznin Permission Group'unu programlı olarak belirleyebilir. getPermissionInfo yöntemi, grubun dize tanımlayıcısını içeren bir group alanına sahip PermissionInfo döndürür. Bu, günlükleme, analiz ve özel izin arayüzü ekranları için kullanışlıdır.

kotlin
fun getPermissionGroupName(
    permission: String
): String? {
    return try {
        val pm = packageManager
        val info = pm.getPermissionInfo(
            permission,
            PackageManager.GET_META_DATA
        )
        info.group
    } catch (e: NameNotFoundException) {
        null
    }
}

fun getPermissionsByGroup(
    group: String
): List<String> {
    val pm = packageManager
    val perms = pm.queryPermissionsByGroup(
        group,
        PackageManager.GET_META_DATA
    )
    return perms.map { it.name }
}

DI ve mimaride kullanım

Permission Group bilgisi, istek mimarisi oluşturmaya yardımcı olur. Belirli bir grup için izin listesini döndüren PermissionGroupProvider adlı bir soyutlama oluşturabilirsiniz. Bu, test etmeyi basitleştirir: birim testlerinde sağlayıcı, PackageManager'i çağırmadan sahte veri döndürür. Enstrümantasyon testlerinde, sistemden gerçek grupları döndürür.

DI'da PermissionGroupProvider

PermissionGroupProvider'ı Dagger Hilt veya Koin aracılığıyla entegre etmek, izin-grup eşlemesinin merkezi yönetimine olanak tanır. Sağlayıcıda, her istekte tekrarlanan sistem çağrılarından kaçınmak için PackageManager.queryPermissionsByGroup sonucunu önbelleğe alabilirsiniz. Bu, özellikle izinlerin tam listesinin ve durumlarının görüntülendiği ayarlar ekranları için önemlidir.

Günlükleme ve analiz

Reddetmelerle ilgili analiz toplarken, yalnızca izin adını değil aynı zamanda Permission Group'unu da günlüğe kaydetmek faydalıdır. Bu, hangi işlevsel alanların en fazla reddetmeye neden olduğunu belirlemeye yardımcı olur. Örneğin, LOCATION grubu geleneksel olarak en yüksek reddetme oranına sahiptir — Google Play Console istatistiklerine göre yaklaşık yüzde 40.

Gruplara göre analiz, ürün kararları almaya yardımcı olur: CONTACTS grubu yüksek bir reddetme oranına sahipse, istek zamanlamasını yeniden gözden geçirmek veya bir gerekçe diyalogu eklemek gerekebilir. Analize grup tabanlı yaklaşım, bireysel izinlerin analizinden daha eksiksiz bir resim sağlar çünkü tüm bir gruptaki reddetme sayısı, kullanıcıların işlevsel bir alana karşı genel tutumunu yansıtır.

Sıkça Sorulan Sorular

Android'de Permission Group nedir?

Permission Group, işlevsel olarak ilişkili tehlikeli izinleri bir kategoride birleştiren bir mekanizmadır. Kullanıcı bir gruptan bir izin verdiyse, diğerleri ek diyalog olmadan otomatik olarak verilir.

Android'de kaç Permission Group vardır?

Standart Android'de yaklaşık 10 ana grup vardır: CAMERA, LOCATION, MICROPHONE, PHONE, CONTACTS, SMS, STORAGE, CALENDAR, SENSORS ve ACTIVITY_RECOGNITION. Android 13+ NEARBY_DEVICES'i ekledi.

Bir geliştirici kendi Permission Group'unu oluşturabilir mi?

Evet, özel izinler için AndroidManifest.xml'deki permissionGroup özniteliği aracılığıyla. Ancak bu yalnızca uygulama içi izinler için çalışır ve sistem arayüzü diyaloglarını etkilemez. Pratikte nadiren kullanılır.

Grup, izin iptalini nasıl etkiler?

Bir gruptan bir izni iptal etmek, diğerlerini iptal etmez. Kullanıcı ACCESS_FINE_LOCATION'ı devre dışı bırakabilir, ancak ACCESS_COARSE_LOCATION etkin kalır. Grup yalnızca vermeyi etkiler, iptali etkilemez.

Rastgele bir iznin grubunu nasıl öğrenebilirim?

PackageManager.getPermissionInfo kullanın ve group alanını okuyun. Yöntem, grubun dize tanımlayıcısını döndürür, örneğin android.permission-group.CAMERA. İznin grubu yoksa, alan null olacaktır.

Özet

  • Permission Group, UX'i basitleştirmek için tehlikeli Android izinlerini gruplama mekanizmasıdır.
  • Bir gruptan bir izin vermek, gruptaki diğerlerini otomatik olarak verir.
  • Sistem grupları: CAMERA, LOCATION, MICROPHONE, PHONE, CONTACTS, SMS, STORAGE, CALENDAR, SENSORS.
  • Gruplar iptali etkilemez — bir izni iptal etmek gruptaki diğerlerini etkilemez.
  • Özel gruplar yalnızca geliştiricinin kendi izinleri için mümkündür.
  • Grup, PackageManager.getPermissionInfo ve group alanı aracılığıyla kontrol edilebilir.
  • Android 13+'ta, Bluetooth ve Wi-Fi izinleri için NEARBY_DEVICES grubu eklendi.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun