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ışı dosya paylaşma ile ilgili en iyi uygulamaları izleyebilir. Ancak bazı uygulamaların temel kullanım alanı, cihazdaki dosyalara geniş kapsamlı erişim gerektirmesine rağmen gizlilik dostu depolama alanı en iyi uygulamalarını kullanarak bu dosyalara verimli bir şekilde erişememektedir. Android, bu durumlar için tüm dosyalara erişim adlı özel bir uygulama erişimi sağlar.

Örneğin, bir antivirüs uygulamasının birincil kullanım alanı, farklı dizinlerdeki birçok dosyanın düzenli olarak taranmasını gerektirebilir. Bu tarama, sistem dosyası seçiciyi kullanarak dizinleri seçmek için kullanıcının tekrar tekrar etkileşimde bulunmasını gerektiriyorsa kötü bir kullanıcı deneyimi sunar. Dosya yöneticisi uygulamaları, yedekleme ve geri yükleme uygulamaları ve doküman yönetimi uygulamaları gibi diğer kullanım alanları da benzer hususları dikkate almayı gerektirir.

Tüm dosyalara erişim isteğinde bulunma

Uygulamalar, aşağıdakileri yaparak kullanıcıdan tüm dosyalara erişim isteğinde bulunabilir:

  1. MANAGE_EXTERNAL_STORAGE iznine manifest dosyasında yer verin.
  2. Kullanıcıları, uygulamanız için aşağıdaki seçeneği etkinleştirebilecekleri bir sistem ayarları sayfasına yönlendirmek üzere ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION intent işlemini kullanın: Tüm dosyaları yönetmek için erişime izin ver.

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

MANAGE_EXTERNAL_STORAGE izninin izin verdiği işlemler

MANAGE_EXTERNAL_STORAGE izni aşağıdakileri sağlar:

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

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

  • Hem USB Taşınabilir (OTG) sürücünün hem de SD kartın kök dizinine erişim.

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

    Bu izin verilen uygulamalar, depolama biriminde Android/data/ alt dizini olarak görünen diğer uygulamalara ait uygulamaya özgü dizinlere yine de erişemez.

MANAGE_EXTERNAL_STORAGE iznine sahip uygulamalar, MediaStore API'yi veya doğrudan dosya yollarını kullanarak bu ek dosya ve dizinlere erişebilir. Ancak Depolama Aksesuar Çerçevesi'ni kullandığınızda bir dosyaya veya dizine yalnızca MANAGE_EXTERNAL_STORAGE izni 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 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 göndermek için getManageSpaceActivityIntent() yöntemini 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 uygulamada özel bir "alanı yönet" etkinliği tanımlanmış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.
  • Belirtilen paket adına sahip uygulama "alan yönet" etkinliği tanımlamıyorsa null.

Test için MANAGE_EXTERNAL_STORAGE iznini etkinleştirme

MANAGE_EXTERNAL_STORAGE izninin uygulamanızı nasıl etkilediğini keşfetmek için testi izinle 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ştiricilere yönelik bir bildirim yer almaktadır.

Google Play Store, paylaşılan depolamaya geniş erişimi sınırlamak için 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 hedefliyorsa ve MANAGE_EXTERNAL_STORAGE iznini bildiriyorsa 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.

Şekil 1. Android Studio'da geliştiricilere MANAGE_EXTERNAL_STORAGE iziniyle 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ızda aşağıdakilerden herhangi birine benzer bir kullanım alanı varsa MANAGE_EXTERNAL_STORAGE iznini isteyebileceğini unutmayın:

  • Dosya yöneticileri
  • Yedekleme ve geri yükleme uygulamaları
  • Virüsten korunma uygulamaları
  • Doküman yönetimi uygulamaları
  • Cihaz üzerinde dosya arama
  • Disk ve dosya şifreleme
  • Cihazlar arasında veri taşıma