Android Harici Depolama: Nedir, Medya Türleri ve Geliştirmede Nasıl Çalışılır

Yazar: IT Sectr Yayınlanma: 2026-03-13 Okuma süresi: 11 dk

Mobil cihazlarda harici depolama, uygun izinlere sahip herhangi bir uygulamanın erişebileceği çıkarılabilir bir veri ortamıdır. Android Open Source Project, 2026'ya göre, Android 10'dan itibaren Google, Scoped Storage'ı tanıttı — dosya sistemine doğrudan erişimi kısıtlayan ve paylaşılan medya dosyalarıyla çalışmak için MediaStore API kullanımını gerektiren bir modeldir. Bu yaklaşım, kullanıcı verilerinin güvenliğini artırır ve uygulamalar arasında bilgi sızıntısını önler.

Önemli Noktalar

  • External Storage — farklı uygulamalar tarafından okunup yazılabilen çıkarılabilir depolama (SD kart, USB-OTG)
  • Scoped Storage (Android 10+) dosya sistemine doğrudan erişimi kısıtlar ve MediaStore API ile değiştirir
  • iOS SD kartları desteklemez — harici dosyalara erişim Document Picker aracılığıyla yapılır
  • İzinler READ_EXTERNAL_STORAGE ve WRITE_EXTERNAL_STORAGE Android 9 ve altı için zorunludur
  • SD kartı dahili veya taşınabilir depolama olarak biçimlendirme, erişim ve şifreleme modelini belirler

Mobil cihazlarda harici depolama nedir?

Harici depolama, uygulamanın korumalı alanının (sandbox) bir parçası olmayan ve diğer programlar tarafından erişilebilen bir bellek alanıdır. Android'de bu terim genellikle SD kartı ifade eder, ancak harici depolama ayrıca OTG adaptörüyle bağlanan USB sürücüleri ve dosya sistemi düzeyinde entegre edilmiş bulut sürücülerini de içerir. Dahili depolamadan temel farkı, yalıtım eksikliğidir: uygun izinlere sahip herhangi bir uygulama, harici depolamadaki dosyaları okuyabilir ve değiştirebilir.

Android'de harici depolamanın iki ana modu vardır: taşınabilir ve benimsenebilir (adoptable). Bir SD kart taşınabilir depolama olarak biçimlendirildiğinde, çıkarılabilir kalır ve FAT32 veya exFAT olarak biçimlendirilir. Benimsenebilir depolama modunda, kart ext4 olarak biçimlendirilir ve AES-128 ile şifrelenir, ardından sistem onu dahili belleğin bir uzantısı olarak ele alır. Benimsenebilir mod, Android 6.0 Marshmallow'dan beri kullanılabilir, ancak cihaz üreticileri bu özelliği genellikle ürün yazılımlarında devre dışı bırakır. Google Play Console istatistiklerine göre, Android cihazların yalnızca yaklaşık %12'si benimsenebilir depolamayı destekler, bu nedenle tek seçenek olarak SD kart aracılığıyla dahili bellek genişletmeye güvenilmesi önerilmez.

iOS'te geleneksel SD kartlar yoktur. Apple, tüm depolamanın dahili flash bellek ve iCloud üzerine kurulu olduğu kapalı bir mimari kullanır. Harici sürücüler Lightning veya USB-C bağlantı noktası üzerinden desteklenir, ancak bunlara erişim, sistem dosya yöneticisi Files ve Document Picker ile entegre olan uygulamalarla sınırlıdır. Kullanıcı, harici bir kaynaktan hangi dosyaların açılacağına karar verir — uygulama, açık izin olmadan bağlı bir sürücüyü tarayamaz.

Harici medya türleri ve özellikleri

Harici medya seçimi, hız, kapasite ve taşınabilirlik gereksinimlerine bağlıdır. Farklı medya türleri, mobil uygulamalarda farklı hız özelliklerine, dosya sistemlerine ve kullanım durumlarına sahiptir.

Medya TürüMaks. KapasiteOkuma HızıDosya Sistemi
SD UHS-I2 TB104 MB/s'ye kadarexFAT / FAT32
SD UHS-II2 TB312 MB/s'ye kadarexFAT / FAT32
USB 3.0 OTG2 TB400 MB/s'ye kadarexFAT / NTFS / FAT32
USB-C SSD4 TB1000 MB/s'ye kadarexFAT / APFS / NTFS

SD Kartlar ve Hız Sınıfları

SD kartlar yazma hızına göre sınıflandırılır: Class 10 (10 MB/s), U1 (10 MB/s), U3 (30 MB/s), V30 (30 MB/s) ve V90 (90 MB/s). 4K video kaydı için en az U3 veya V30 kart gereklidir. Büyük medya dosyalarıyla (fotoğraf işleme, video düzenleme) çalışan mobil uygulamalar için U3 sınıfı ve üzeri kartların kullanılması önerilir. Kart hızı, uygulama performansını doğrudan etkiler: Class 10 kartta 4K video kaydı, yetersiz bant genişliği nedeniyle kare düşüşlerine neden olabilir. Bir uygulama için SD kart seçerken yalnızca hız sınıfına değil, aynı zamanda Uygulama Performans Sınıfı derecesine de dikkat edin: A1 ve A2, veritabanı ve uygulama önbellek işlemleri için kritik olan minimum rastgele okuma ve yazma performansını belirtir.

USB-OTG Sürücüler

USB-OTG (On-The-Go), bir adaptör aracılığıyla mobil cihaza harici USB sürücüleri bağlamaya olanak tanır. Android, sürüm 3.1'den beri OTG'yi destekler, ancak sürücüyü bağlamak için dosya sistemi desteğine sahip bir çekirdek gerekir. FAT32 ve exFAT varsayılan olarak desteklenir, NTFS — yalnızca özel çekirdekli cihazlarda veya Paragon kitaplığı aracılığıyla. iOS'te USB sürücü desteği, iOS 13'te Files uygulamasıyla ortaya çıktı. Bir sürücüyle çalışmak için uygulamanın UIDocumentPickerViewController kullanması gerekir; bu, yalnızca kullanıcı tarafından seçilen dosyalara erişim sağlar — iOS, sürücünün dosya sistemine tam erişim izni vermez.

Bir Uzantı Olarak Bulut Depolama

Bulut hizmetleri — iCloud, Google Drive, Dropbox — sistem sağlayıcıları aracılığıyla cihazın dosya sistemine entegre olabilir. iOS'te iCloud Drive, uygulamanın Sandbox kapsayıcısının bir parçasıdır ve dosyalar kullanıcının cihazları arasında otomatik olarak senkronize olur. Android'de Google Drive, dosyaları okumak ve yazmak için bir API sağlar, ancak dosya sistemine doğrudan bağlama gerçekleşmez. Büyük hacimli verilerle çalışan mobil uygulamalar için bulut depolama, özellikle genişletme yuvası olmayan cihazlarda SD karta bir alternatif olabilir.

Android'de harici depolama ile nasıl çalışılır

Android'de harici depolama ile çalışmak, işletim sistemi sürümüne ve Scoped Storage modeline bağlıdır. Dosya erişim süreci, Android 9 ve altı, Android 10–12 ve Android 13+ için farklılık gösterir.

MediaStore API ile Erişim

Android 10'dan itibaren, paylaşılan medya dosyalarına erişmenin birincil yolu MediaStore API'dir. Bu API, paylaşılan depolamadaki görüntüleri, videoları ve ses dosyalarını okumak ve yazmak için birleşik bir arayüz sağlar. Bir uygulama, kendi dosyalarına erişmek için READ_EXTERNAL_STORAGE iznine ihtiyaç duymaz, ancak diğer uygulamaların dosyalarını okumak için yine de açık kullanıcı izni gerekir. MediaStore, medya dosyalarını otomatik olarak indeksler ve bunları sorgulamak için bir ContentResolver sağlar.

kotlin
val collection = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY)
} else {
    MediaStore.Images.Media.EXTERNAL_CONTENT_URI
}

val projection = arrayOf(
    MediaStore.Images.Media._ID,
    MediaStore.Images.Media.DISPLAY_NAME
)

val cursor = contentResolver.query(collection, projection, null, null, null)

Sorguyu çalıştırdıktan sonra, dosyaların URI'lerini içeren bir Cursor alırsınız. Bir dosyayı okumak için contentResolver.openInputStream(uri) aracılığıyla bir InputStream açın. Yazma, contentResolver.openOutputStream(uri) aracılığıyla benzer şekilde yapılır. MediaStore, ad çakışmalarını otomatik olarak işler ve contentResolver.insert(uri, values) aracılığıyla yeni dosyalar ekleme olanağı sağlar; bu, oluşturulan dosyanın URI'sini döndürür.

SAF ile Rastgele Dosyalarla Çalışma

Storage Access Framework (SAF), Android 10+'ta rastgele dosyalara erişmek için önerilen yöntemdir. SAF, kullanıcının uygulamaya belirli bir dosyaya veya dizine erişim izni verdiği bir sistem dosya seçici iletişim kutusu sağlar. Uygulama, cihaz yeniden başlatılana veya ayarlarda izin açıkça iptal edilene kadar geçerli olan bir erişim URI'si alır. SAF, READ_EXTERNAL_STORAGE veya WRITE_EXTERNAL_STORAGE izinleri gerektirmez, bu da Google Play'de yayınlamayı basitleştirir ve izin isteklerinin sayısını azaltır.

kotlin
val requestCode = 42
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
intent.addFlags(
    Intent.FLAG_GRANT_READ_URI_PERMISSION
        or Intent.FLAG_GRANT_WRITE_URI_PERMISSION
)
startActivityForResult(intent, requestCode)

iOS'te harici depolama ile nasıl çalışılır

iOS'te harici dosyalarla çalışma, kullanıcının belirli dosyaları veya dizinleri seçmek için açtığı UIDocumentPickerViewController etrafında yapılandırılmıştır. Uygulamanın harici sürücünün dosya sistemine doğrudan erişimi yoktur — yalnızca kullanıcının açıkça seçtiği dosyalara erişebilir. Dosya seçiminden sonra uygulama, Sandbox kapsayıcısında geçici bir URL alır ve FileManager aracılığıyla dosyayla çalışabilir.

UIDocumentPickerViewController Kullanımı

UIDocumentPickerViewController, kullanıcının mevcut herhangi bir kaynaktan (iCloud Drive, bağlı bir USB sürücü veya üçüncü taraf bir bulut hizmeti) bir veya daha fazla dosya seçmesine olanak tanır. Seçimden sonra denetleyici, uygulamanın oturum sırasında okuyabileceği bir URL dizisi döndürür. Uygulama kapandıktan sonra erişimi sürdürmek için startAccessingSecurityScopedResource() çağrılmalı ve UserDefaults'a güvenlik kapsamlı bir yer imi kaydedilmelidir.

swift
let picker = UIDocumentPickerViewController(
    forOpeningContentTypes: [.data, .image],
    asCopy: true
)
picker.delegate = self

func documentPicker(
    controller: UIDocumentPickerViewController,
    didPickDocumentsAt urls: [URL]
) {
    guard let url = urls.first else { return }
    let data = try Data(contentsOf: url)
}

asCopy: true parametresi, iOS'in dosyayı uygulamanın Sandbox kapsayıcısına kopyalayacağı ve uygulamanın orijinal dosyadan bağımsız kendi kopyasını alacağı anlamına gelir. asCopy: false belirtilirse, uygulama orijinal dosyaya bir referans alır, ancak ona erişmek için url.startAccessingSecurityScopedResource() çağrılmalıdır. Bu çağrı olmadan dosyayı okumak bir istisnaya neden olur. Dosyayla işiniz bittiğinde, kaynağı serbest bırakmak ve tanımlayıcı sızıntılarını önlemek için her zaman url.stopAccessingSecurityScopedResource() çağrısını yapın.

Harici depolamanın sınırlamaları ve güvenliği

Harici depolamanın güvenliği, dosyalar diğer uygulamalar tarafından erişilebilir olduğundan dahili depolamadan daha düşüktür. READ_EXTERNAL_STORAGE iznine sahip herhangi bir uygulama, SD karttaki tüm dosyaları okuyabilir; buna uygulamanızın hassas verileri geçici olarak depolamak için oluşturduğu dosyalar da dahildir. Kötü niyetli bir uygulama, SD kartı tarayabilir ve şifrelenmemişse kullanıcı verilerini çıkarabilir. Bu nedenle, harici depolamada kimlik doğrulama belirteçlerini, parolaları veya kullanıcının kişisel verilerini düz metin olarak depolamak kesinlikle önerilmez.

Android 10+'ta Scoped Storage, uygulamaların paylaşılan dosya sistemine erişimini önemli ölçüde sınırlar. Bir uygulama, izin olmadan yalnızca kendi oluşturduğu dosyaları okuyabilir ve diğer uygulamaların dosyalarına erişmek için SAF iletişim kutusu aracılığıyla açık kullanıcı onayı gerekir. Ancak bu kısıtlama, hedef SDK sürümü 29'un altında olan uygulamalar için geçerli değildir — eski model altında çalışmaya devam ederler ve uygulamalarını güncellememiş kullanıcılar için risk oluştururlar. Google Play, 2021'den beri tüm yeni ve güncellenen uygulamalar için targetSdkVersion 29+ gerektirmektedir.

Biçimlendirme ve şifreleme güvenliğin bir diğer önemli yönüdür. Taşınabilir depolama olarak biçimlendirilmiş bir SD kart, varsayılan olarak sistem tarafından şifrelenmez. Benimsenebilir depolama kullanırken bile şifreleme, yalnızca cihaz üreticisi bu özelliği ürün yazılımında etkinleştirdiyse etkinleştirilir. Harici depolamada kaydedilen hassas verileri korumak için, sistem şifrelemesinden bağımsız olarak her dosyayı AES256-GCM kullanarak ayrı ayrı şifreleyen AndroidX Security'den EncryptedFile kitaplığını kullanın.

Harici depolama kullanımı için öneriler

Harici depolamanın etkili kullanımı, veri kullanılabilirliği ve güvenlik arasında bir denge gerektirir. Kullanıcı dosyalarının güvenilir bir şekilde depolanmasını sağlamak için bu kuralları izleyin.

  • Harici depolamada hassas verileri şifrelemeden depolamayın. Belirteçleri, parolaları ve kişisel verileri korumak için EncryptedFile veya EncryptedSharedPreferences kullanın
  • Yazmadan önce harici depolamanın kullanılabilirliğini kontrol edin: SD kart durumunu kontrol etmek için Environment.getExternalStorageState() kullanın. Kart çıkarılmış, hasar görmüş veya yazma için kullanılamaz durumda olabilir
  • Android 10+'ta Scoped Storage ve SAF kullanarak paylaşılan dosyalara erişin. Bu, istenen izin sayısını azaltır ve kullanıcı deneyimini iyileştirir
  • Harici depolamayla çalışırken her zaman istisnaları işleyin. Okuma sırasında bir dosya başka bir uygulama tarafından silinebilir veya taşınabilir, bu da FileNotFoundException'a neden olur
  • Harici depolamaya büyük miktarda veri yazmadan önce kullanıcıyı uyarın. Bir onay iletişim kutusu gösterin ve SAF aracılığıyla bir dizin seçmeye izin verin

Harici depolamanın arızalar sırasında veri bütünlüğünü garanti etmediğini unutmamak önemlidir. SD kartların, özellikle Class 4 ve Class 6 bütçe modellerinde sınırlı sayıda yeniden yazma döngüsü vardır. Yoğun yazma (örneğin, günlüğe kaydetme veya akış verilerini önbelleğe alma) ile bir kart birkaç ay içinde arızalanabilir. Bu tür senaryolar için dahili bellek veya bulut depolama kullanın ve harici depolamada yalnızca kaybını kullanıcının kabul edilebilir bulacağı dosyaları kaydedin. StatFs aracılığıyla SD kart durumunu düzenli olarak kontrol edin ve kullanıcıyı kritik dosya sistemi hataları hakkında bilgilendirin.

Sıkça Sorulan Sorular

Android 13'te harici depolamaya erişmek için izin gerekli mi?

Android 13+ üzerinde READ_EXTERNAL_STORAGE izninin yerini daha ayrıntılı izinler almıştır: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO ve READ_MEDIA_AUDIO. Diğer dosya türleri için SAF kullanın.

SD kart dahili bellek olarak biçimlendirilebilir mi?

Evet, benimsenebilir depolama (adoptable storage) özelliği Android 6.0+'da mevcuttur. Kart, AES-128 şifrelemesiyle ext4 olarak biçimlendirilir. Ancak birçok üretici bu seçeneği devre dışı bırakır ve cihazların yaklaşık %88'i benimsenebilir depolamayı desteklemez.

Cihazda SD kart takılı olup olmadığı nasıl kontrol edilir?

Bir durum dizesi döndüren Environment.getExternalStorageState() yöntemini kullanın. MEDIA_MOUNTED değeri, kartın okuma ve yazma için kullanılabilir olduğu anlamına gelir. Diğer değerler hataları veya kartın olmadığını belirtir.

Scoped Storage ve tam dosya sistemi erişimi arasındaki fark nedir?

Scoped Storage, uygulamayı kendi kapsayıcısı ve paylaşılan MediaStore medya galerileriyle sınırlar. Tam erişim, cihazdaki herhangi bir dosyayı okumaya izin verir. Scoped Storage, kullanıcı verilerinin güvenliğini artırır ve yeni uygulamalar için zorunludur.

SAF aracılığıyla SD karttaki bir dosyaya erişmek için URI nasıl alınır?

Bir sistem dizin seçici iletişim kutusu açacak olan ACTION_OPEN_DOCUMENT_TREE eylemiyle bir Intent başlatın. Seçimden sonra, yeniden başlatmaya kadar geçerli bir URI izni alırsınız. Daha sonra kullanmak üzere bu URI'yi SharedPreferences'a kaydedin.

Özet

  • External Storage — uygun izinlere sahip tüm uygulamaların erişebileceği çıkarılabilir depolama (SD kart, USB-OTG)
  • Scoped Storage (Android 10+) doğrudan dosya sistemi erişimini kısıtlar ve medya dosyaları için MediaStore API'sini sunar
  • iOS SD kartları desteklemez — harici dosya erişimi yalnızca UIDocumentPickerViewController aracılığıyla kullanılabilir
  • SD kartlar hız sınıflarına ayrılır: Class 10, U1, U3, V30, V90 — 4K video kaydı için minimum U3 gerekir
  • Harici depolamanın güvenliği dahili depolamadan daha düşüktür — yazmadan önce hassas verileri şifreleyin
  • Benimsenebilir depolama SD kartın dahili belleğin uzantısı olarak kullanılmasına izin verir, ancak yalnızca cihazların %12'sinde desteklenir
  • Rastgele dosyalara erişmek için SAF kullanılması ve kritik verilerin şifreleme olmadan depolanmaması önerilir

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