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 kullanması için tasarlanmış dosyaları dahili depolama birimi içindeki özel dizinlerde veya harici depolama birimi içindeki 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 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 kullanması için tasarlanmış 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 |
Diğer uygulamalara erişirken READ_EXTERNAL_STORAGE dosyalar açık
Android 11 (API düzeyi 30) veya sonraki sürümlerREAD_EXTERNAL_STORAGE veya WRITE_EXTERNAL_STORAGE
diğer uygulamalara erişirken Android 10'daki (API düzeyi 29) dosyalarAndroid 9'da (API düzeyi 28) tüm dosyalar için izin alınması gerekir veya daha düşük |
Evet, ancak diğer uygulamanın READ_EXTERNAL_STORAGE iznine ihtiyacı var
|
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ı gerekir?
- Uygulamanızın temel işlevi için belirli veriler gerekiyorsa (ör. uygulamanız başlatılırken) verileri dahili depolama alanı dizinine veya bir veritabanına 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 tercihleri (anahtar/değer verileri için) veya veritabanını (2'den fazla sütun içeren veriler için) kullanın.
- Veriler uygulamanız için özel mi olmalı?
- Hassas verileri saklarken (başkalarının erişememesi gereken veriler) dahili depolama, tercihler veya veritabanı kullanma. Dahili depolama alanının bir diğer 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. Bu nedenle, uygulamanızın ihtiyaç duyduğu verileri depolamak için daha güvenilir bir yerdir.
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. Ancak APK'nızın boyutu çok büyükse uygulamanızın manifest dosyasında, uygulamanızın harici depolama alanına yüklenmesini tercih edebilirsiniz:
<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, uygulamaya özel dizinin ve MediaStore
dışındaki dosyalara yazma erişimi sağlayan MANAGE_EXTERNAL_STORAGE
iznini kullanıma sunar. 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 vermek ve dosya karmaşasını sınırlandırmak için Android 10 (API düzeyi 29) ve sonraki sürümleri hedefleyen uygulamalara varsayılan olarak harici depolamaya veya kısıtlı depolamaya kapsamlı erişim verilir. 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, uygulamaya özel bir dizinin ve MediaStore
API'lerinin erişebildiği bir dizinin dışında depolanan bir dosyaya erişmesi gerekmiyorsa sınırlı depolama alanını kullanın. 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ı.
Cihazdaki dosyaları 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.