Android'de depolama alanı güncellemelerinin \n11

Android 11 (API düzeyi 30), platformu daha da geliştirerek harici depolama alanındaki uygulama ve kullanıcı verileri için daha iyi koruma sağlar. Bu sürümde, ham dosya yolu erişimi, medya için toplu düzenleme işlemleri ve Depolama Erişim Çerçevesi için güncellenmiş bir kullanıcı arayüzü gibi çeşitli geliştirmeler sunulmaktadır.

Bu sürümde, kapsamlı depolama alanında da iyileştirmeler yapıldı. Bu sayede geliştiriciler, bu depolama alanı modeline geçtikten sonra depolama alanı kullanım alanlarını daha kolay yerine getirebilecek.

Kapsamlı depolama alanı yaptırımı

Android 11'de çalışan ancak Android 10'u (API düzeyi 29) hedefleyen uygulamalar requestLegacyExternalStorage özelliğini istemeye devam edebilir. Bu işaret, uygulamaların kapsamlı depolama alanıyla ilişkili değişiklikleri (ör. farklı dizinlere ve farklı medya dosyası türlerine erişim izni verme) geçici olarak devre dışı bırakmasına olanak tanır. Uygulamanızı Android 11'i hedefleyecek şekilde güncelledikten sonra sistem, requestLegacyExternalStorage işaretini yoksayar.

Android 10 ile uyumluluğu koruma

Uygulamanız Android 10 cihazlarda çalışırken kapsamlı depolama alanını devre dışı bırakıyorsa uygulamanızın manifest dosyasında requestLegacyExternalStorage değerini true olarak ayarlamaya devam etmeniz önerilir. Böylece uygulamanız, Android 10 çalıştıran cihazlarda beklendiği gibi çalışmaya devam edebilir.

Verileri, kapsamlı depolama alanı kullanılırken görünen dizinlere taşıma

Uygulamanız eski depolama alanı modelini kullanıyorsa ve daha önce Android 10 veya daha eski sürümleri hedeflediyse verileri, kapsamlı depolama alanı modeli etkinleştirildiğinde uygulamanızın erişemeyeceği bir dizinde depoluyor olabilirsiniz. Android 11'i hedeflemeden önce verileri kapsamlı depolama alanıyla uyumlu bir dizine taşıyın.

Kapsamlı depolama alanını test etme

Uygulamanızın hedef SDK sürümü ve manifest işaret değerlerinden bağımsız olarak uygulamanızda kapsamlı depolama alanını etkinleştirmek için aşağıdaki uygulama uyumluluğu işaretlerini etkinleştirin:

Kapsamlı depolama alanını devre dışı bırakmak ve bunun yerine eski depolama alanı modelini kullanmak için her iki işaretin de ayarını kaldırın.

Cihaz depolama alanını yönetme

Android 11'den itibaren, kapsamlı depolama alanı modelini kullanan uygulamalar yalnızca uygulamaya özel önbellek dosyalarına erişebilir. Uygulamanızın cihaz depolama alanını yönetmesi gerekiyorsa boş alan sorgulama ile ilgili talimatları uygulayın.

  1. ACTION_MANAGE_STORAGE intent işlemini çağırarak boş alan olup olmadığını kontrol edin.
  2. Cihazda yeterli boş alan yoksa kullanıcıdan uygulamanızın tüm önbellekleri temizlemesine izin vermesini isteyin. Bunun için ACTION_CLEAR_APP_CACHE intent işlemini çağırın.

Harici depolama alanında uygulamaya özel dizin

Android 11'den itibaren uygulamalar, harici depolama alanında uygulamaya özel dizinlerini oluşturamaz. Sistemin uygulamanız için sağladığı dizine erişmek için getExternalFilesDirs() yöntemini çağırın.

Medya dosyası erişimi

Android 11, kullanıcı gizliliğini korurken medyaya erişimi kolaylaştırmak için aşağıdaki özellikleri ekler.

Toplu işlemler gerçekleştirme

Android 11, cihazlar arasında tutarlılık sağlamak ve kullanıcıya daha fazla kolaylık sunmak için medya dosyası gruplarını yönetmeyi kolaylaştıran çeşitli yöntemler ekler.

Doğrudan dosya yollarını ve yerel kitaplıkları kullanarak dosyalara erişme

Uygulamanızın üçüncü taraf medya kitaplıklarıyla daha sorunsuz çalışmasına yardımcı olmak için Android 11, doğrudan dosya yollarını kullanarak paylaşılan depolama alanındaki medya dosyalarına erişmek için MediaStore API'si dışındaki API'leri kullanmanıza olanak tanır. Bu API'ler şunlardır:

  • File API'si.
  • fopen() gibi yerel kitaplıklar.

Diğer uygulamalardaki verilere erişim

Kullanıcı gizliliğini korumak için Android 11 veya sonraki sürümlerin yüklü olduğu cihazlarda sistem, uygulamanızın diğer uygulamaların özel dizinlerine erişimini daha da kısıtlar.

Dahili depolama alanındaki veri dizinlerine erişim

Android 9 (API düzeyi 28), dahili depolama alanındaki veri dizinlerinde bulunan dosyaları diğer uygulamaların erişimine açabilecek uygulamaları kısıtlamaya başladı. Android 9 veya sonraki sürümleri hedefleyen uygulamalar, veri dizinlerindeki dosyaları herkesin erişimine açamaz.

Android 11 bu kısıtlamayı genişletir. Uygulamanız Android 11'i hedefliyorsa diğer uygulama Android 8.1 (API düzeyi 27) veya daha eski bir sürümü hedeflese ve veri dizinindeki dosyaları herkes tarafından okunabilir hale getirse bile başka bir uygulamanın veri dizinindeki dosyalara erişemez.

Harici depolama alanındaki uygulamaya özel dizinlere erişim

Android 11'de uygulamalar artık harici depolama alanındaki başka bir uygulamanın uygulamaya özel dizinindeki dosyalara erişemez.

Doküman erişim kısıtlamaları

Geliştiricilere test için zaman tanımak amacıyla, Depolama Alanı Erişim Çerçevesi (SAF) ile ilgili aşağıdaki değişiklikler yalnızca uygulamanız Android 11 veya sonraki sürümleri hedefliyorsa geçerli olur.

Dizinlere erişim

Aşağıdaki dizinlere erişim istemek için artık ACTION_OPEN_DOCUMENT_TREE intent işlemini kullanamazsınız:

  • Dahili depolama biriminin kök dizini.
  • Kartın emüle edilmiş veya çıkarılabilir olup olmadığına bakılmaksızın, cihaz üreticisinin güvenilir olarak kabul ettiği her SD kart biriminin kök dizini. Güvenilir bir birim, bir uygulamanın çoğu zaman başarıyla erişebildiği bir birimdir.
  • Download dizini.

Dosyalara erişim

Kullanıcıdan aşağıdaki dizinlerden tek tek dosya seçmesini istemek için artık ACTION_OPEN_DOCUMENT_TREE veya ACTION_OPEN_DOCUMENT intent işlemini kullanamazsınız:

  • Android/data/ dizini ve tüm alt dizinler.
  • Android/obb/ dizini ve tüm alt dizinler.

Değişikliği test etme

Bu davranış değişikliğini test etmek için aşağıdakileri yapın:

  1. ACTION_OPEN_DOCUMENT işlemiyle bir intent'i çağırın. Android/data/ ve Android/obb/ dizinlerinin ikisinin de görünmediğinden emin olun.
  2. Aşağıdakilerden birini yapın:
  3. ACTION_OPEN_DOCUMENT_TREE işlemiyle bir intent çağırın. Download dizininin göründüğünden ve dizinle ilişkili işlem düğmesinin devre dışı olduğundan emin olun.

İzinler

Android 11, depolama alanı izinleriyle ilgili aşağıdaki değişiklikleri içerir.

Herhangi bir sürümü hedefleme

İlk iletişim kutusunda, "Ayarlarda izin ver" adlı bir bağlantı gösterilir.
Şekil 1. Bir uygulama kapsamlı depolama alanı kullandığında ve READ_EXTERNAL_STORAGE izni istediğinde gösterilen iletişim kutusu.

Uygulamanızın hedef SDK sürümünden bağımsız olarak aşağıdaki değişiklikler Android 11'de geçerli olur:

  • Depolama alanı çalışma zamanında istenen izni, Dosyalar ve Medya olarak yeniden adlandırıldı.
  • Uygulamanız kapsamlı depolama özelliğini devre dışı bırakmadıysa ve READ_EXTERNAL_STORAGE iznini istiyorsa kullanıcılar Android 10'dakinden farklı bir iletişim kutusu görür. İletişim kutusu, uygulamanızın fotoğraflara ve medyaya erişim istediğini gösterir (Şekil 1'de gösterildiği gibi).

    Kullanıcılar, sistem ayarlarında hangi uygulamaların READ_EXTERNAL_STORAGE iznine sahip olduğunu görebilir. Ayarlar > Gizlilik > İzin yöneticisi > Dosyalar ve medya sayfasında, izne sahip her uygulama Tüm dosyalar için izin verildi bölümünde listelenir. Uygulamanız Android 11'i hedefliyorsa "tüm dosyalara" erişimin salt okunur olduğunu unutmayın. Bu uygulamayı kullanarak paylaşılan depolama alanındaki tüm dosyaları okumak ve yazmak için tüm dosyalara erişim izninizin olması gerekir.

Android 11'i hedefleme

Uygulamanız Android 11'i hedefliyorsa WRITE_EXTERNAL_STORAGE izni ve WRITE_MEDIA_STORAGE ayrıcalıklı izni artık ek erişim sağlamaz.

Android 10 (API düzeyi 29) veya sonraki sürümlerin yüklü olduğu cihazlarda, uygulamanızın depolama alanıyla ilgili izinler istemeden MediaStore.Downloads gibi iyi tanımlanmış medya koleksiyonlarına katkıda bulunabileceğini unutmayın. Uygulamanızda medya dosyalarıyla çalışırken yalnızca gerekli izinleri isteme hakkında daha fazla bilgi edinin.

Tüm dosyalara erişim

Paylaşılan depolama alanı erişimi 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 gizlilik haklarına saygılı depolama alanıyla ilgili en iyi uygulamaları kullanarak bunu verimli bir şekilde yapamazlar. Android, bu gibi durumlar için Tüm dosyalara erişim adlı özel bir uygulama erişimi sunar. Daha fazla bilgi edinmek için bir depolama cihazındaki tüm dosyaları yönetme ile ilgili kılavuzu inceleyin.

Ek kaynaklar

Android 11'deki depolama alanı değişiklikleri hakkında daha fazla bilgi için aşağıdaki materyalleri inceleyin:

Blog yayınları

Videolar