Android 13'te depolama izinleriyle nasıl çalışılır

Kerem Aydın·6 Temmuz 2026·⏱3 dk

Android 13'te multimedya erişimi granüler hale geldi: genel READ_EXTERNAL_STORAGE yerine READ_MEDIA_IMAGES/VIDEO/AUDIO kullanılıyor; tek seferlik dosya seçimi için Photo Picker tercih ediliyor; MANAGE_EXTERNAL_STORAGE yalnızca gerçek "tüm dosyalar" senaryoları için.

Android 13'te tam olarak neler değişti

Android 13, medya okuma için üç ayrı runtime izni getirdi: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO ve READ_MEDIA_AUDIO. Scoped storage temel model olarak kalıyor: uygulama varsayılan olarak yalnızca kendi dizinlerini görür. Tek tek dosya seçimi için sistem Photo Picker'ı önerilir; bu, runtime izni istemeden URI sağlar. MANAGE_EXTERNAL_STORAGE "hepsi bir arada" seçeneği olarak kalmaya devam ediyor, ancak verilmesi sıkı şekilde kontrol ediliyor ve yayınlama sırasında gerekçelendirme gerektiriyor.

Göreviniz kullanıcıya bir veya birkaç fotoğraf/video seçtirmekse, Photo Picker veya SAF kullanın: bu, küresel izinler istemekten daha basit ve güvenlidir.

Hangi izin veya aracın ne zaman kullanılacağı

Medyaya erişim yöntemlerinin karşılaştırılması

GörevAraç / izinNe zaman kullanılmalı
Tek seferlik fotoğraf/video seçimiPhoto Picker / ACTIONOPENDOCUMENTKullanıcının dosyaları kendisinin seçmesi gerektiğinde her zaman
Toplu resim okumaREADMEDIAIMAGESGaleri, fotoğraf analizi, hedef API 33+
Toplu video okumaREADMEDIAVIDEOVideo kütüphanesini görüntüleme/işleme
Toplu ses okumaREADMEDIAAUDIOOynatıcılar, ses analizi
Tüm dosyalara erişimMANAGEEXTERNALSTORAGEDosya yöneticileri, yedeklemeler — yalnızca alternatif olmadığında

Pratik kural: İzin setini minimize edin — yalnızca gerçekten gerekli olanları isteyin.

Pratik geçiş: adım adım yapılması gerekenler

  1. targetSdkVersion'ı 33+ seviyesine çıkarın ve testleri çalıştırın: eski depolama izinlerinin davranışı değişecektir.
  2. Erişim senaryolarını analiz edin: tek seferlik seçim mi, toplu çalışma mı, yoksa tam erişim mi.
  3. Dosya seçimi için Photo Picker / SAF uygulayın — bu, izin mantığı gereksinimlerini azaltır.
  4. Toplu medya okuma gerekiyorsa, manifest'e ilgili READ_MEDIA_* izinlerini ekleyin ve bunları dinamik olarak isteyin. Kullanıcıya isteğin nedenini açıklayın.
  5. Yazma işlemi için MediaStore.insert/update veya ACTION_CREATE_DOCUMENT kullanın; WRITE_EXTERNAL_STORAGE'dan kaçının.
  6. MANAGE_EXTERNAL_STORAGE — yalnızca SAF/MediaStore ile yapılamıyorsa uygulayın; Play Console için belgelenmiş bir gerekçe hazırlayın.

Basit bir izin isteme örneği (Kotlin):

// kayıt
val request = registerForActivityResult(ActivityResultContracts.RequestPermission()) { ok ->
    if (ok) { /* erişim var */ } else { /* ipucu göster veya Ayarlar'a yönlendir */ }
}
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_MEDIA_IMAGES)
    != PackageManager.PERMISSION_GRANTED) {
    request.launch(Manifest.permission.READ_MEDIA_IMAGES)
}

Photo Picker çağrısı örneği:

val pick = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
    uri?.let {
        contentResolver.takePersistableUriPermission(it, Intent.FLAG_GRANT_READ_URI_PERMISSION)
        // işleme
    }
}
pick.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageAndVideo))

Sık yapılan hatalar

  • API 33+ üzerinde WRITE_EXTERNAL_STORAGE istenmesi — iletişim kutusu görünmeyebilir; READ_MEDIA_* veya Photo Picker kullanın.
  • Tek bir granted READ_EXTERNAL_STORAGE'nın tümünü kapsadığı varsayılması — artık haklar granülerdir.
  • "Kullanıcı iki kez reddetti" senaryosunun işlenmemesi — ayarlara açık bir yol önerin.
  • Eski/standart olmayan ROM'larda Photo Picker kullanılabilirliğinin kontrol edilmemesi — SAF'e fallback yapın.

MANAGE_EXTERNAL_STORAGE'yı son çare olmadan istemeyin: moderasyonda reddedilme riski artar ve kullanıcı güvenini kaybedersiniz.

SSS

  • Genel medya kütüphanesine yazmak için WRITE_EXTERNAL_STORAGE gerekir mi?
    Hayır. Yazma işlemi için MediaStore API veya ACTION_CREATE_DOCUMENT kullanın; WRITE_EXTERNAL_STORAGE scoped storage için eskidi.
  • Hızlı medya erişimi sağlayan mini bir galeri göstermek gerekirse ne yapılmalı?
    İlgili READ_MEDIA_* izinlerini (yalnızca gerekli olanları) isteyin ve kullanıcıya amacı açıklayın.
  • Photo Picker tüm cihazlarda mevcut mu?
    Modern cihazlarda evet; eski OEM ROM'ları için SAF veya kendi seçicinize fallback yapın.

Geçiş kontrol listesi

  • [ ] Senaryoları ayırdınız: seçim vs toplu çalışma vs tam erişim.
  • [ ] Mümkün olan her yerde Photo Picker/SAF entegre edildi.
  • [ ] Manifest'te yalnızca gerekli READ_MEDIA_* izinleri belirtilmiş ve dinamik olarak isteniyor.
  • [ ] Yazma işlemi için MediaStore veya ACTION_CREATE_DOCUMENT kullanılıyor.
  • [ ] MANAGE_EXTERNAL_STORAGE gerekiyorsa — açıklama ve gizlilik politikası hazırlandı.

İsterseniz, dosya erişimi modülünüz için bir yama veya Android 11–14 ile popüler cihazlarda test etmek üzere bir test planı hazırlayabilirim.