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 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.
- Ortak depolama: Uygulamanızın diğer uygulamalarla paylaşmak istediği dosyaları (ör. medya, dokümanlar ve diğer dosyalar) depolayın.
- Tercihler: Gizli, ilkel verileri anahtar/değer çiftlerinde depolayın.
- Veritabanları: Room kalıcılık kitaplığını kullanarak yapılandırılmış verileri özel bir veritabanında depolayı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 kaldırılır mı? | |
---|---|---|---|---|---|
Uygulamaya özel dosyalar | Yalnızca uygulamanızın kullanması için tasarlanmış dosyalar | Dahili depolama alanından getFilesDir() veya
getCacheDir() Harici depolama alanından getExternalFilesDir() veya
getExternalCacheDir() |
Dahili depolama alanı için hiçbir zaman gerekli değildir Uygulamanız Android 4.4 (API düzeyi 19) veya daha yeni sürümleri çalıştıran cihazlarda kullanıldığında harici depolama alanı için gerekli değildir |
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ümlerde diğer uygulamaların dosyalarına erişirkenREAD_EXTERNAL_STORAGE veya WRITE_EXTERNAL_STORAGE
Android 10 (API düzeyi 29) sürümünde diğer uygulamaların dosyalarına erişirkenAndroid 9 (API düzeyi 28) veya önceki sürümlerde tüm dosyalar için izinler gereklidir |
Evet, ancak diğer uygulamanın READ_EXTERNAL_STORAGE iznine ihtiyacı var
|
Hayır |
Belgeler ve diğer dosyalar | İndirilen dosyalar dahil olmak üzere diğer paylaşılabilir içerik türleri | Depolama Erişim Çerçevesi | Yok | Evet, sistem dosyası seçici aracılığıyla | Hayır |
Uygulama tercihleri | Anahtar/değer çiftleri | Jetpack Tercihleri 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, ihtiyaçlarınıza bağlıdır:
- Verileriniz için ne kadar alan gerekiyor?
- Dahili depolama alanında, uygulamaya özgü veriler için sınırlı alan vardır. Çok miktarda veri kaydetmeniz gerekiyorsa diğer depolama alanlarını kullanın.
- 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. Bazı cihazlar kullanıcıların harici depolama alanına karşılık gelen fiziksel bir cihazı kaldırmasına izin verdiğinden, harici depolama alanında depolanan uygulamaya özel dosyalara her zaman erişilemez.
- Ne tür verileri depolamanız gerekiyor?
- Yalnızca uygulamanız için anlamlı verilere sahipseniz 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 paylaşılan depolama alanını kullanın. 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 gizli mi olmalı?
- Hassas verileri (başka hiçbir uygulamadan erişilmemesi gereken veriler) saklarken dahili depolama alanını, tercihleri veya bir veritabanını kullanın. Dahili depolama alanının bir diğer avantajı, verilerin kullanıcılardan gizlenmesidir.
Depolama alanı konumlarının kategorileri
Android iki tür fiziksel depolama alanı sunar: dahili depolama ve harici depolama. Çoğu cihazda dahili depolama alanı harici depolama alanından daha küçüktür. 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 harici depolama alanı kapsamında görünür. Android, bu cihazları /sdcard
gibi bir yol kullanarak gösterir.
Uygulamalar 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 şu izinleri tanımlar:
READ_EXTERNAL_STORAGE
,
WRITE_EXTERNAL_STORAGE
ve
MANAGE_EXTERNAL_STORAGE
.
Android'in önceki sürümlerinde uygulamaların, harici depolama alanındaki uygulamaya özel dizinlerin dışındaki dosyalara erişmek için READ_EXTERNAL_STORAGE
iznini belirtmesi gerekiyordu.
Ayrıca, uygulamaların uygulamaya özel dizinin dışındaki herhangi bir dosyaya yazmak için WRITE_EXTERNAL_STORAGE
iznini belirtmesi gerekiyordu.
Android'in daha yeni sürümleri, bir uygulamanın belirli bir dosyaya erişip erişemeyeceğini ve dosyaya yazabileceğini belirlemek için dosyanın konumundan çok amacına bakar. Özellikle uygulamanız Android 11'i (API düzeyi 30) veya sonraki sürümleri hedefliyorsa WRITE_EXTERNAL_STORAGE
izninin, uygulamanızın depolamaya erişimi üzerinde hiçbir etkisi yoktur. Uygulamalara yalnızca cihazın dosya sisteminin gerçekten kullandıkları alanlarına erişim verildiğinden bu amaca dayalı depolama modeli kullanıcı gizliliğini iyileştirir.
Android 11, uygulamaya özel dizinin ve MediaStore
dışındaki dosyalara yazma erişimi sağlayan MANAGE_EXTERNAL_STORAGE
iznini kullanıma sunar. Bu izin hakkında daha fazla bilgi edinmek ve çoğu uygulamanın kullanım alanlarını yerine getirmek için neden bu izni belirtmesi gerekmediğini öğrenmek isterseniz bir depolama cihazındaki tüm dosyaları yönetme ile ilgili kılavuzu inceleyin.
Kapsamlı depolama alanı
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 özel dizine ve uygulamanın oluşturduğu belirli medya türlerine erişebilir.
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 depolama alanında depoluyorsanız bu dosyaları harici depolama alanında uygulamaya özel bir dizine yerleştirerek sınırlı depolama alanını kullanmaya geçişi kolaylaştırabilirsiniz. Bu sayede, uygulamanız kapsamlı depolama alanı etkinleştirildiğinde 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ızda, kapsamlı depolama alanı kapsamında olmayan başka bir kullanım alanı varsa özellik isteği gönderin. 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 Cihaz Dosya Gezgini'ni kullanın.
Ek kaynaklar
Veri depolama alanı hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın.