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

Paylaşılan depolama alanına erişim gerektiren uygulamaların çoğu, medya dosyalarını paylaşma ve medya dışı dosyaları paylaşma ile ilgili en iyi uygulamaları takip edebilir. Ancak bazı uygulamaların temel kullanım alanı, cihazdaki dosyalara geniş kapsamlı erişim gerektirir ancak gizliliği korumaya yönelik depolama alanıyla ilgili en iyi uygulamaları kullanarak bu dosyalara verimli bir şekilde erişemezler. Android, bu durumlar için tüm dosyalara erişim adlı özel bir uygulama erişimi sağlar.

Örneğin, bir virüsten korunma uygulamasının birincil kullanım alanı, farklı dizinlerdeki birçok dosyanın düzenli olarak taranmasını gerektirebilir. Bu tarama, sistem dosya seçicisini kullanarak dizinleri seçmek için tekrarlanan kullanıcı etkileşimleri gerektiriyorsa kötü bir kullanıcı deneyimi sunar. Dosya yöneticisi uygulamaları, yedekleme ve geri yükleme uygulamaları ile doküman yönetimi uygulamaları gibi diğer kullanım alanları da benzer hususları gerektirir.

Tüm dosyalara erişim isteğinde bulunma

Bir uygulama, aşağıdaki işlemleri 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ı, uygulamanız için şu seçeneği etkinleştirebilecekleri bir sistem ayarları sayfasına yönlendirmek üzere ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION amaç işlemini kullanın: Tüm dosyaları yönetmek için erişime izin ver.

Uygulamanıza MANAGE_EXTERNAL_STORAGE iznin verilip verilmediğini belirlemek için Environment.isExternalStorageManager() işlevini çağırın.

MANAGE_EXTERNAL_STORAGE tarafından izin verilen işlemler

MANAGE_EXTERNAL_STORAGE izni aşağıdaki işlemleri yapmanıza olanak tanır:

  • Paylaşılan depolama alanındaki tüm dosyalara okuma ve yazma erişimi.

  • MediaStore.Files tablosunun içeriğine erişim.

  • USB on-the-go (OTG) sürücüsünün ve SD kartın kök dizinine erişim.

  • /Android/data/, /sdcard/Android ve /sdcard/Android'nin çoğu alt dizini hariç olmak üzere tüm dahili depolama dizinlerine yazma erişimi. Bu yazma erişimi, doğrudan dosya yolu erişimini içerir.

    Bu izin verilen uygulamalar, diğer uygulamalara ait uygulamaya özel dizinlere erişemez. Çünkü bu dizinler, bir depolama biriminde Android/data/ alt dizinleri olarak görünür.

Bir uygulama MANAGE_EXTERNAL_STORAGE iznine sahip olduğunda MediaStore API'sini veya doğrudan dosya yollarını kullanarak bu ek dosya ve dizinlere erişebilir. Ancak Storage Access Framework'ü kullandığınızda MANAGE_EXTERNAL_STORAGE izni olmadan erişebileceğiniz dosya veya dizinlere erişebilirsiniz.

Başka bir uygulamanın depolama alanı yönetimi etkinliğini çağırma

Android 12 (API düzeyi 31) ve sonraki sürümlerde, hem MANAGE_EXTERNAL_STORAGE iznine hem de QUERY_ALL_PACKAGES iznine sahip 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() iznini kullanabilir.

getManageSpaceActivityIntent() yöntemi, bir paket adı ve istek kodu alır ve aşağıdakilerden birini döndürür:

  • Belirtilen paket adına sahip 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 intent'i çağırabilir.
  • null, belirtilen paket adına sahip uygulama "manage space" etkinliğini tanımlamıyorsa.

Test için MANAGE_EXTERNAL_STORAGE iznini etkinleştirme

MANAGE_EXTERNAL_STORAGE izninin uygulamanızı nasıl etkilediğini öğrenmek için izni test amacıyla etkinleştirebilirsiniz. Bunu yapmak 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 yer almaktadır.

Paylaşılan depolama alanına geniş erişimi sınırlamak için Google Play Store, Android 11'i (API düzeyi 30) veya sonraki sürümleri hedefleyen ve MANAGE_EXTERNAL_STORAGE izni aracılığıyla tüm dosyalara erişim isteyen uygulamaları değerlendirmek üzere politikasını güncelledi. Bu politika Mayıs 2021'den itibaren geçerlidir.

Uygulamanız Android 11 veya sonraki sürümleri 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 politika olduğunu hatırlatır.

1. Şekil. 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 Depolama Erişim Çerçevesi veya Media Store API gibi gizliliği daha fazla koruyan API'leri verimli bir şekilde kullanamadığında isteyin. Uygulamanızın izin kullanımı, izin verilen kullanımlar kapsamına girmeli ve uygulamanın temel işleviyle doğrudan bağlantılı olmalıdır. Uygulamanız aşağıdaki kullanım alanlarından herhangi birine benzer bir kullanım alanı içeriyorsa MANAGE_EXTERNAL_STORAGE iznini isteyebilir:

  • Dosya yöneticileri
  • Yedekleme ve geri yükleme uygulamaları
  • Virüsten korunma uygulamaları
  • Doküman yönetimi uygulamaları
  • Cihaz üzerindeki dosyalarda arama
  • Disk ve dosya şifreleme
  • Cihazdan cihaza veri taşıma