Veri ve dosya depolamaya genel bakış

Android, diğer platformlardaki disk tabanlı dosya sistemlerine benzer bir dosya sistemi kullanır. Sistem, uygulama verilerinizi kaydetmeniz için çeşitli seçenekler sunar:

  • Uygulamaya özel depolama: Yalnızca uygulamanızın kullanımına yönelik dosyaları, dahili depolama birimindeki özel dizinlerde veya harici depolama alanındaki farklı özel dizinlerde saklayın. Diğer uygulamaların erişmemesi gereken hassas bilgileri kaydetmek için dahili depolama alanındaki dizinleri kullanın.
  • Paylaşılan depolama alanı: Uygulamanızın diğer uygulamalarla paylaşmayı amaçladığı dosyaları (medya, dokümanlar ve diğer dosyalar dahil) depolayın.
  • Tercihler: Özel, temel verileri anahtar/değer çiftleri halinde saklayın.
  • Veritabanları: Yapılandırılmış verileri Room kalıcılık kitaplığını kullanarak özel bir veritabanında saklayın.

Bu seçeneklerin özellikleri aşağıdaki tabloda özetlenmiştir:

İçerik türü Erişim yöntemi İzin gerekli Diğer uygulamalar erişebilir mi? Uygulama kaldırıldığında dosyalar da kaldırılır mı?
Uygulamaya özel dosyalar Yalnızca uygulamanızın kullanımına yönelik dosyalar Dahili depolamadan, getFilesDir() veya getCacheDir()

Harici depolamadan, getExternalFilesDir() veya getExternalCacheDir()
Dahili depolama alanı için hiçbir zaman gerekmez

Uygulamanız Android 4.4 (API düzeyi 19) veya sonraki sürümlerin yüklü olduğu cihazlarda kullanıldığında harici depolama alanı için gerekmez.
Hayır Evet
Medya Paylaşılabilir medya dosyaları (resimler, ses dosyaları, videolar) MediaStore API READ_EXTERNAL_STORAGE Android 11 (API düzeyi 30) veya sonraki sürümlerdeki diğer uygulamaların dosyalarına erişirken

READ_EXTERNAL_STORAGE veya WRITE_EXTERNAL_STORAGE Android 10'da (API düzeyi 29) diğer uygulamaların dosyalarına erişirken

Android 9'da (API düzeyi 28) veya önceki sürümlerdeki tüm dosyalar için izinler gerekir.
Evet, ancak diğer uygulamanın READ_EXTERNAL_STORAGE izni olması gerekir. Hayır
Dokümanlar ve diğer dosyalar İndirilen dosyalar da dahil olmak üzere, paylaşılabilir diğer içerik türleri Depolama Erişimi Çerçevesi Yok Evet, sistem dosya seçicisi aracılığıyla Hayır
Uygulama tercihleri Anahtar/değer çiftleri Jetpack Preferences kitaplığı Yok Hayır Evet
Veritabanı Yapılandırılmış veri Room kalıcılık kitaplığı Yok Hayır Evet

Seçeceğiniz çözüm, özel ihtiyaçlarınıza bağlıdır:

Verileriniz ne kadar alan gerektiriyor?
Dahili depolama alanında uygulamaya özel veriler için sınırlı alan vardır. Önemli miktarda veri kaydetmeniz gerekiyorsa diğer depolama türlerini kullanın.
Veri erişimi ne kadar güvenilir olmalıdır?
Uygulamanızın temel işlevi için belirli veriler gerekiyorsa (ör. uygulamanız başlatılırken) verileri dahili depolama dizinine veya bir veritabanına yerleştirin. Harici depolama alanında saklanan uygulamaya özel dosyalara her zaman erişilemez. Bunun nedeni, bazı cihazların kullanıcıların harici depolamaya karşılık gelen fiziksel bir cihazı kaldırmasına izin vermesidir.
Ne tür verileri depolamanız gerekiyor?
Yalnızca uygulamanız için anlamlı olan verileriniz varsa uygulamaya özel depolama alanını kullanın. Paylaşılabilir medya içerikleri için, diğer uygulamaların içeriğe erişebilmesi amacıyla Shared Storage'ı kullanın. Yapılandırılmış veriler için tercihler (anahtar/değer verileri için) veya veritabanı (2'den fazla sütun içeren veriler için) kullanın.
Veriler uygulamanız için özel mi olmalı?
Başka bir uygulamadan erişilmemesi gereken hassas verileri depolarken dahili depolama, tercihler veya veritabanı kullanın. Dahili depolama alanı, verilerin kullanıcılardan gizlenmesi gibi ek bir avantaj sunar.

Depolama konumlarının kategorileri

Android, iki tür fiziksel depolama konumu sağlar: dahili depolama ve harici depolama. Çoğu cihazda dahili depolama alanı, harici depolama alanından daha küçüktür. Ancak dahili depolama alanı her zaman tüm cihazlarda kullanılabilir. Bu nedenle, uygulamanızın bağlı olduğu verileri yerleştirmek için daha güvenilir bir yerdir.

SD kart gibi çıkarılabilir birimler, dosya sisteminde harici depolama alanının bir parçası olarak görünür. Android, bu cihazları /sdcard gibi bir yolla temsil eder.

Uygulamalar varsayılan olarak dahili depolama alanında saklanır. Ancak APK'nızın boyutu çok büyükse uygulamanızın manifest dosyasında, uygulamanızın harici depolama alanına yüklenmesiyle ilgili bir tercih belirtebilirsiniz:

<manifest ...
  android:installLocation="preferExternal">
  ...
</manifest>

Harici depolama alanına erişim ve izinler

Android, depolamayla ilgili aşağıdaki izinleri tanımlar: READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE, ve MANAGE_EXTERNAL_STORAGE.

Android'in önceki sürümlerinde uygulamaların, harici depolamadaki uygulamaya özel dizinler dışındaki dosyalara erişmek için READ_EXTERNAL_STORAGE iznini bildirmesi gerekiyordu. Ayrıca uygulamaların, uygulamaya özel dizinin dışındaki herhangi bir dosyaya yazmak için WRITE_EXTERNAL_STORAGE iznini bildirmesi gerekiyordu.

Android'in daha yeni sürümlerinde, bir uygulamanın belirli bir dosyaya erişme ve dosyaya yazma özelliğini belirlemek için dosyanın konumundan ziyade amacına daha fazla güvenilir. Özellikle uygulamanız Android 11'i (API düzeyi 30) veya sonraki sürümleri hedefliyorsa WRITE_EXTERNAL_STORAGE izni, uygulamanızın depolama alanına erişimini etkilemez. Bu amaca dayalı depolama modeli, uygulamalara yalnızca cihazın dosya sisteminin gerçekten kullandıkları alanlarına erişim izni verildiğinden kullanıcı gizliliğini artırır.

Android 11, uygulamaya özel dizinin dışındaki dosyalara yazma erişimi sağlayan MANAGE_EXTERNAL_STORAGE iznini kullanıma sunar ve MediaStore. Bu izin ve çoğu uygulamanın kullanım alanlarını karşılamak için neden bu izni bildirmesi gerekmediği hakkında daha fazla bilgi edinmek için depolama cihazındaki tüm dosyaları yönetme hakkındaki kılavuza bakın.

Kısıtlı depolama

Kullanıcılara dosyaları üzerinde daha fazla kontrol olanağı sunmak ve dosya karmaşasını sınırlamak için Android 10'u (API düzeyi 29) ve sonraki sürümleri hedefleyen uygulamalara varsayılan olarak harici depolama alanına kısıtlı erişim (kısıtlı depolama) verilir. Bu tür uygulamalar, harici depolama alanındaki uygulamaya özel dizinin yanı sıra uygulamanın oluşturduğu belirli medya türlerine erişebilir.

Uygulamanızın, uygulamaya özel bir dizinin dışında ve MediaStore API'lerinin erişebileceği bir dizinin dışında depolanan bir dosyaya erişmesi gerekmiyorsa kısıtlı depolamayı kullanın. Uygulamaya özel dosyaları harici depolama alanında saklıyorsanız bu dosyaları harici depolama alanında uygulamaya özel bir dizine yerleştirerek kısıtlı depolamayı daha kolay kullanabilirsiniz. Bu sayede, kapsamlı depolama etkinleştirildiğinde uygulamanız bu dosyalara erişmeye devam eder.

Uygulamanızı kapsamlı depolamaya hazırlamak için depolama alanı kullanım alanları ve en iyi uygulamalar kılavuzunu inceleyin. Uygulamanızın, kapsamlı depolama tarafından kapsanmayan başka bir kullanım alanı varsa özellik isteğinde bulunun. Kapsamlı depolama alanını kullanmayı geçici olarak devre dışı bırakabilirsiniz.

Cihazdaki dosyaları görüntüleme

Bir cihazda depolanan dosyaları görüntülemek için Android Studio'nun Device File Explorer'ını kullanın.

Ek kaynaklar

Veri depolama hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın.

Videolar