Depolama cihazındaki tüm dosyaları yönetme

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:

  1. Manifest dosyasında MANAGE_EXTERNAL_STORAGE iznini beyan edin.
  2. 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.

Şekil 1. Android Studio'da, geliştiricilere 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