Android 11'de Scoped Storage Nasıl Çalışır ve "İndirilenler"de Dosyalar Nerede Bulunur?
Özetle: Android 11, Scoped Storage özelliğini getirdi — uygulamalar artık kendi uygulama özelindeki klasörleri ve genel koleksiyonları API aracılığıyla görür. "İndirilenler" klasörü fiziksel olarak mevcuttur (genellikle /storage/emulated/0/Download), ancak içeriğine erişim MediaStore.Downloads veya Storage Access Framework (SAF) aracılığıyla sağlanmalıdır; tam yetki yalnızca MANAGE_EXTERNAL_STORAGE izniyle ve sadece sıkı gerekçelendirilmiş durumlarda mümkündür.
Android 11'de Ne Değişti ve Neden Önemli?
Scoped Storage, genel depolamaya rastgele erişimi kısıtlar. Bu, gizliliği artırır: uygulama başka dosyaları yoldan okuyamaz. Geliştiriciler için bu şu anlama gelir:
- Fotoğraf/video/ses için MediaStore kullanın.
- Rastgele dosyalar için ya MediaStore.Downloads ya da SAF (ACTION_OPEN_DOCUMENT / ACTION_OPEN_DOCUMENT_TREE) kullanın.
- MANAGE_EXTERNAL_STORAGE son çaredir, kullanıcının manuel olarak etkinleştirmesini gerektirir ve mağazada yayınlarken gerekçelendirme ister.
Eğer kullanıcıysanız ve dosyayı "İndirilenler"de göremiyorsanız, önce yerleşik "Dosyalar" uygulamasını → "İndirilenler" bölümünü açın veya MTP modunda bilgisayara bağlanın — burada klasör doğrudan görünür.
Geliştiriciler İçin İndirilenlere Erişimin Pratik Yolları
- MediaStore — medya içeriği ve Download içindeki birçok dosya durumu için:
- ContentResolver ve Uris aracılığıyla okuma/yazma.
- Downloads dizinine yazmak için RELATIVE_PATH desteği sunar.
Downloads'a yazma örneği (Kotlin):
val values = ContentValues().apply {
put(MediaStore.MediaColumns.DISPLAY_NAME, "report.pdf")
put(MediaStore.MediaColumns.MIME_TYPE, "application/pdf")
put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS)
}
val uri = contentResolver.insert(MediaStore.Downloads.getContentUri("external"), values)
uri?.let { contentResolver.openOutputStream(it)?.use { out -> /* write bytes */ } }
- Storage Access Framework (SAF) — kullanıcının dosya/klasör seçmesi veya kalıcı erişim gerekiyorsa:
- ACTION_OPEN_DOCUMENT — dosya seçmek için.
- ACTION_OPEN_DOCUMENT_TREE — klasör seçmek ve kalıcı URI izni almak için.
Intent örneği:
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
addCategory(Intent.CATEGORY_OPENABLE)
type = "*/*"
}
startActivityForResult(intent, REQUEST_CODE_OPEN)
- MANAGE_EXTERNAL_STORAGE — tam yetki, yalnızca zorunlu durumlarda:
- Kullanıcı ayarlardan "Tüm dosyalara erişim"i manuel olarak etkinleştirir.
- Ciddi bir iş mantığı ve uygulama yayınlarken beyan gerekir.
Gizli geçiş yöntemlerini ve resmi olmayan API'leri kullanmayın — bu güvenilir değildir, mağaza kurallarını ihlal edebilir ve farklı cihazlarda bozulabilir.
Normal Bir Kullanıcı Olarak İndirilenleri Nerede Bulabilirsiniz?
- "Dosyalar" uygulamasını → "İndirilenler"i açın (veya ayrı bir "İndirilenler" uygulaması kullanın).
- Telefonu dosya aktarım modunda (MTP) bilgisayara bağlayın — Download klasörünü göreceksiniz.
- İndirme bir uygulama içinde (tarayıcı, e-posta) yapıldıysa, uygulamanın dahili klasörünü kontrol edin — tüm indiriciler dosyayı genel Download içine koymaz.
Dosya indirilmiş gibi görünüyor ama görünmüyorsa — "Dosyalar" uygulamasının önbelleğini temizleyin veya cihazı yeniden başlatın; bazen sistem dosyaları gecikmeli indeksler.
Sık Yapılan Hatalar
- File API aracılığıyla /storage/emulated/0/Download okumaya çalışmak — başka dosyalar için çalışmaz. Çözüm: MediaStore veya SAF.
- /Android/data'nın erişilebilir olmasını beklemek — bu klasörlere erişim tasarımsal olarak kısıtlıdır.
- MANAGE_EXTERNAL_STORAGE yanlış kullanımı — gerekçe olmadan uygulama mağazada reddedilebilir.
SSS
- Eski kodu Scoped Storage'a migrate etmek gerekiyor mu? Evet — doğrudan File yolları kullanıyorsanız, Android 11+ üzerinde düzgün çalışması için MediaStore/SAF'e geçiş zorunludur.
- Kullanıcı müdahalesi olmadan Downloads'tan başka dosyalar okunabilir mi? Genellikle hayır; MediaStore kullanın veya kullanıcıdan SAF aracılığıyla dosya seçmesini isteyin.
- Davranışı nasıl test edersiniz? Gerçek cihazlarda ve farklı OS derlemelerinde kontrol edin: üreticiler MTP ve izinlerin uygulanmasında farklılık gösterebilir.
Geliştirici Kontrol Listesi
- Medya içeriği için MediaStore kullanın.
- Belgeler ve kullanıcı seçimi için — persistable izinlerle SAF.
- MANAGE_EXTERNAL_STORAGE — yalnızca gerektiğinde, kullanıcı talimatları ve mağaza beyanı ile.
- Farklı cihazlarda test edin ve erişim hatalarını zarifçe yönetin.
Kısaca: Android 11 depolamayı daha gizli hale getiriyor — uygulamanızı MediaStore ve SAF'e adapte edin ve kullanıcılara "Tüm dosyalara erişim"in ne zaman ve neden gerekli olduğunu açıklayın.