Veri ve dosya depolamaya genel bakış

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

  • Uygulamaya özel depolama alanı: Yalnızca uygulamanızın kullanımı için olan dosyaları depolayın, dahili depolama birimindeki özel dizinlerde veya farklı dizinleri oluşturun. Şuradaki dizinleri kullanın: dahili depolama biriminizi kullanır.
  • Paylaşılan depolama alanı: Uygulamanızın diğer kullanıcılarla paylaşmak istediği dosyaları depolayın Uygulamalar (medya, dokümanlar ve diğer dosyalar dahil)
  • Tercihler: Gizli, temel verileri anahtar/değer çiftlerinde depolayın.
  • Veritabanları: Yapılandırılmış verileri, Odayı kullanarak özel bir veritabanında depolayın kalıcılık kitaplığına erişebilirsiniz.

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 kaldırıldı mı?
Uygulamaya özel dosyalar Yalnızca uygulamanızın kullanımı için dosyalar Dahili depolamadan, getFilesDir() veya getCacheDir()

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

Harici için gerekli değildir uygulamanız Android 4.4 (API düzeyi 19) yüklü cihazlarda kullanıldığında depolama alanı veya üzeri
Hayır Evet
Medya Paylaşılabilir medya dosyaları (resimler, ses dosyaları, videolar) MediaStore API'si Diğer uygulamalara erişirken READ_EXTERNAL_STORAGE dosyalar açık Android 11 (API düzeyi 30) veya sonraki sürümler

READ_EXTERNAL_STORAGE veya WRITE_EXTERNAL_STORAGE diğer uygulamalara erişirken Android 10'daki (API düzeyi 29) dosyalar

Android 9'da (API düzeyi 28) tüm dosyalar için izin alınması gerekir veya daha düşük
Evet, ancak diğer uygulama için READ_EXTERNAL_STORAGE gerekiyor izin Hayır
Belgeler ve diğer dosyalar İndirilen dosyalar da dahil olmak üzere diğer paylaşılabilir içerik türleri Depolama Erişim Çerçevesi Yok Evet, sistem dosya seçiciden Hayır
Uygulama tercihler Anahtar/değer çiftleri Jetpack Tercihler kitaplığı Yok Hayır Evet
Veritabanı Yapılandırılmış veri Oda 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 depolamada, uygulamaya özel veriler için sınırlı alan bulunur. Diğer türlerdeki depolama alanınızı nasıl kullanabileceğinizi açıklayacağız.
Veri erişiminin ne kadar güvenilir olması gerekiyor?
Uygulamanızın temel işlevi belirli verileri gerektiriyorsa (ör. uygulamanızın bir veri tabanına veya dahili depolama dizinine yerleştirin. Harici depolama alanında depolanan uygulamaya özel dosyalara her zaman erişilemez Çünkü bazı cihazlar kullanıcıların telefonunuza karşılık gelen fiziksel bir cihazı kaldırmasına Harici depolama alanı.
Ne tür verileri saklamanız gerekiyor?
Yalnızca uygulamanız için anlamlı olan verileriniz varsa uygulamaya özel depolama alanına sahip olursunuz. Paylaşılabilir medya içerikleri için diğer uygulamaların paylaşabilmesi için paylaşılan depolama alanını kullanın içeriğe erişebilir. Yapılandırılmış veriler için iki tercihten birini (anahtar/değer çifti için verileri) veya veritabanı (2'den fazla sütun içeren veriler için) arasında olması gerekir.
Veriler uygulamanıza özel olmalı mı?
Hassas verileri saklarken (başkalarının erişememesi gereken veriler) dahili depolama, tercihler veya veritabanı kullanma. Dahili depolamada ek avantajı, verilerin kullanıcılardan gizlenmesidir.

Depolama konumu kategorileri

Android iki tür fiziksel depolama konumu sağlar: dahili depolama ve harici depolama alanı. Çoğu cihazda dahili depolama, harici depolama alanından daha küçüktür depolama alanına sahip olursunuz. Ancak dahili depolama alanı tüm cihazlarda her zaman kullanılabilir olduğundan, verileri koymak için daha güvenilir bir yer sağlar.

SD kart gibi çıkarılabilir birimler, dosya sisteminde şu öğenin bir parçası olarak görünür: Harici depolama birimi. Android, bu cihazları şöyle bir yol kullanarak temsil eder: /sdcard

Uygulamaların kendisi varsayılan olarak dahili depolama alanında depolanır. APK boyutunuz Ancak çok büyük olsa da uygulamanızın manifest dosyasında bir tercih belirtebilirsiniz. dosyasını yükleyin:

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

İzinler ve harici depolama alanına erişim

Android, depolama alanıyla 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 Uygulamaya özel alan adının dışındaki tüm dosyalara READ_EXTERNAL_STORAGE izni dizinleri oluşturun. Ayrıca, uygulamaların WRITE_EXTERNAL_STORAGE iznini beyan etmesi gerekiyor uygulamaya özel dizin dışındaki herhangi bir dosyayı içerebilir.

Android'in son sürümlerinde dosyalar, konuma değil amacına dayalıdır bir uygulamanın belirli bir dosyaya erişme ve dosyaya yazma yeteneğini belirlemek için kullanılır. İçinde Özellikle uygulamanız Android 11 (API düzeyi 30) veya sonraki sürümleri hedefliyorsa WRITE_EXTERNAL_STORAGE izninin, uygulamanızın üzerinde herhangi bir etkisi yoktur veya depolama alanına erişebilir. Amaca dayalı bu depolama modeli, kullanıcı gizliliğini artırır Çünkü uygulamalara yalnızca cihazın dosya sisteminde yer alan ve yardımcı olur.

Android 11, MANAGE_EXTERNAL_STORAGE iznini sunar. Bu izin, Uygulamaya özel dizin ve MediaStore dışındaki dosyalara yazma erişimi. Alıcı: bu izin ve çoğu uygulamanın neden bu izni beyan etmesi gerekmediği hakkında daha fazla bilgi hakkında ayrıntılı bilgi edinmek isterseniz tüm kaynakları dosyalarınız üzerinde kullanılabilir.

Kapsamlı depolama

Kullanıcılara dosyaları üzerinde daha fazla kontrol sağlamak ve dosya karışıklığını azaltmak amacıyla, hedef Android 10 (API düzeyi 29) ve sonraki sürümler için harici depolama alanını veya kapsamlı depolama alanını kullanabilirsiniz. Bu tür uygulamalar yalnızca harici depolama alanındaki uygulamaya özgü dizin ve belirli medya türleri uygulama tarafından oluşturulur.

Uygulamanızın, dışında depolanan bir dosyaya erişmesi gerekmiyorsa kapsamlı depolama alanını kullanın. uygulamaya özel bir dizinin ve MediaStore API'ler erişebilir. Uygulamaya özel dosyaları harici depolamada depoluyorsanız şunları yapabilirsiniz: Bu dosyaları, geniş kapsamlı depolama alanının kolayca benimsenmesini sağlamak için uygulamaya özgü harici dizin depolama alanı. Böylece uygulamanız , kapsamlı depolama etkinleştirildiğinde bu dosyalara erişimi korur.

Uygulamanızı kapsamlı depolama alanına hazırlamak için depolama alanı kullanım alanlarını ve en iyi rehberini inceleyin. Uygulamanızın başka bir kullanım alanı varsa kapsamlı depolama alanı kapsamında değilse bir özellik kaydedin isteyebilirsiniz. Şunları yapabilirsiniz: kapsamlı olarak kullanmayı geçici olarak devre dışı bırak depolama alanı.

Dosyaları bir cihazda görüntüleme

Bir cihazda depolanan dosyaları görüntülemek için Android Studio'nun Cihaz Dosyası'nı kullanın. öğrenin.

Ek kaynaklar

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

Videolar