Paylaşılan depolama alanı erişimi gerektiren uygulamaların çoğu, medya dosyaları paylaşma ve medya dışı dosyaları paylaşma ile ilgili en iyi uygulamaları izleyebilir. Ancak bazı uygulamaların bir cihazdaki dosyalara geniş kapsamlı erişim gerektiren temel bir kullanım alanı vardır, ancak gizliliği koruyan depolama en iyi uygulamalarını kullanarak dosyalara verimli bir şekilde erişemezler. Android, bu durumlar için tüm dosyalara erişim adı verilen özel bir uygulama erişimi sağlar.
Örneğin, bir virüsten koruma uygulamasının birincil kullanım alanı, farklı dizinlerdeki birçok dosyanın düzenli olarak taranmasını gerektirebilir. Bu tarama, dizinleri sistem dosya seçiciyi kullanarak seçmek için tekrarlanan kullanıcı etkileşimleri gerektirirse kötü bir kullanıcı deneyimi sunar. Dosya yöneticisi uygulamaları, yedekleme ve geri yükleme uygulamaları, doküman yönetimi uygulamaları gibi diğer kullanım alanları için de benzer şekilde dikkat edilmesi gerekir.
Tüm dosyalara erişim iste
Bir uygulama, aşağıdakileri yaparak kullanıcıdan tüm dosyalara erişim isteğinde bulunabilir:
- Manifest dosyasında
MANAGE_EXTERNAL_STORAGE
iznini beyan edin. - Kullanıcıları bir sistem ayarları sayfasına yönlendirmek için
ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION
amaç işlemini kullanın. Bu sayfada, kullanıcılar uygulamanız için şu seçeneği etkinleştirebilirler: Tüm dosyaları yönetme erişimine izin ver.
Uygulamanıza MANAGE_EXTERNAL_STORAGE
izni verilip verilmediğini öğrenmek için Environment.isExternalStorageManager()
numaralı telefonu arayın.
MANAGE_EXTERNAL_STORAGE tarafından izin verilen işlemler
MANAGE_EXTERNAL_STORAGE
izni aşağıdakileri sağlar:
Paylaşılan depolama alanındaki tüm dosyalara okuma ve yazma erişimi.
MediaStore.Files
tablosunun içeriğine erişim.Hareket Halinde USB (OTG) sürücüsü ve SD kartın kök dizinine erişim.
/Android/data/
,/sdcard/Android
ve/sdcard/Android
alt dizininin çoğu hariç tüm dahili depolama dizinlerine yazma erişimi. Bu yazma erişimine doğrudan dosya yolu erişimi de dahildir.Bu izne sahip olan uygulamalar başka uygulamalara ait olan uygulamaya özel dizinlere hâlâ erişemez. Bunun nedeni, bu dizinlerin bir depolama biriminde
Android/data/
alt dizinleri olarak görünmesidir.
MANAGE_EXTERNAL_STORAGE
iznine sahip uygulamalar, MediaStore
API'sini veya doğrudan dosya yollarını kullanarak bu ek dosyalara ve dizinlere erişebilir. Ancak Depolama Erişim Çerçevesi'ni kullandığınızda, bir dosyaya veya dizine yalnızca MANAGE_EXTERNAL_STORAGE
izniniz olmadan erişebiliyorsanız erişebilirsiniz.
Başka bir uygulamanın depolama alanı yönetim etkinliğini çağırma
Android 12 (API düzeyi 31) ve sonraki sürümlerde hem MANAGE_EXTERNAL_STORAGE
hem de QUERY_ALL_PACKAGES
iznine sahip olan uygulamalar (ör. dosya yönetimi uygulamaları) kullanıcıları başka bir uygulamanın özel alan yönetimi etkinliğine yönlendirmek için getManageSpaceActivityIntent()
özelliğini kullanabilir.
getManageSpaceActivityIntent()
yöntemi, bir paket adını ve istek kodunu alır ve aşağıdakilerden birini döndürür:
- Belirtilen paket adıyla uygulama özel bir "alan yönetme" etkinliği tanımlamışsa
PendingIntent
.getManageSpaceActivityIntent()
yöntemini çağıran dosya yönetimi uygulaması, kullanıcıları özel etkinliğe göndermek için döndürülen niyeti çağırabilir. - Belirtilen paket adına sahip uygulama bir "boşluk yönetme" etkinliği tanımlamıyorsa
null
.
Test için MANAGE_EXTERNAL_STORAGE alanını etkinleştirin
MANAGE_EXTERNAL_STORAGE
izninin uygulamanızı nasıl etkilediğini öğrenmek isterseniz izni test için etkinleştirebilirsiniz. Bunun için test cihazınıza bağlı makinede aşağıdaki komutu çalıştırın:
adb shell appops set --uid PACKAGE_NAME MANAGE_EXTERNAL_STORAGE allow
Google Play bildirimi
Bu bölümde, Google Play'de uygulama yayınlayan geliştiriciler için bir bildirim sağlanmaktadır.
Google Play Store, paylaşılan depolama alanına geniş kapsamlı erişimi sınırlandırmak için politikasını güncelleyerek Android 11 (API düzeyi 30) veya sonraki sürümleri hedefleyen uygulamaları değerlendirdi ve MANAGE_EXTERNAL_STORAGE
izniyle tüm dosyalara erişim izni istedi. Bu politika
Mayıs 2021 tarihinden itibaren geçerlidir.
Uygulamanız Android 11 veya sonraki bir sürümü hedeflediğinde ve MANAGE_EXTERNAL_STORAGE
iznini bildirdiğinde Android Studio Şekil 1'de gösterilen lint uyarısını gösterir. Bu uyarı, Google Play Store'da iznin kullanımını sınırlayan bir politikası olduğunu hatırlatır.
MANAGE_EXTERNAL_STORAGE
izniyle ilgili Google Play politikasını hatırlatan Lint uyarısı.
MANAGE_EXTERNAL_STORAGE
iznini yalnızca uygulamanız Storage Erişim Çerçevesi veya Media Store API gibi gizliliği daha fazla koruyan API'leri etkili bir şekilde kullanamadığında isteyin. Uygulamanızın izin kullanımı, izin verilen kullanımlar kapsamına girmeli ve doğrudan uygulamanın temel işleviyle bağlantılı olmalıdır. Uygulamanız aşağıdakilerden herhangi birine benzer bir kullanım alanı içeriyorsa muhtemelen MANAGE_EXTERNAL_STORAGE
iznini isteyebilir:
- Dosya yöneticileri
- Yedekleme ve geri yükleme uygulamaları
- Virüsten korunma uygulamaları
- Doküman yönetimi uygulamaları
- Cihazda dosya arama
- Disk ve dosya şifreleme
- Cihazdan cihaza veri taşıma