Android'de depolama alanı güncellemeleri ↗11

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

Sürüm, kapsamlı depolama ile ilgili iyileştirmeler de sunarak geliştiricilerin bu depolama alanı modelini kullanmaya geçtikten sonra depolama alanı kullanım alanlarını yerine getirmelerini kolaylaştırıyor.

Kapsamlı depolama yaptırımı

Android 11'de çalışan ancak Android 10'u (API düzeyi 29) hedefleyen uygulamalar yine de requestLegacyExternalStorage özelliğini isteyebilir. Bu işaret, uygulamaların farklı dizinlere ve farklı medya dosyası türlerine erişim verme gibi kapsamlı depolamayla ilişkili değişiklikleri 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 sürdürme

Uygulamanız Android 10 cihazlarda çalışırken kapsamlı depolama alanını devre dışı bırakırsa uygulamanızın manifest dosyasında requestLegacyExternalStorage öğesini true olarak ayarlamaya devam etmeniz önerilir. Bu şekilde uygulamanız Android 10 çalıştıran cihazlarda beklendiği gibi davranmaya devam edebilir.

Kapsamlı depolamayı kullanırken görünen dizinlere veri taşıma

Uygulamanız eski depolama modelini kullanıyorsa ve daha önce Android 10 veya önceki bir sürümü hedeflediyse verileri kapsamlı depolama modeli etkin durumdayken uygulamanızın erişemediği bir dizinde depoluyor olabilirsiniz. Android 11'i hedeflemeden önce verileri kapsamlı depolamayla uyumlu bir dizine taşıyın.

Kapsamlı depolamayı test etme

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

Kapsamlı depolamayı devre dışı bırakıp bunun yerine eski depolama 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 modelini kullanan uygulamalar yalnızca kendi uygulamaya özel önbellek dosyalarına erişebilir. Uygulamanızın cihaz depolama alanını yönetmesi gerekiyorsa boş alan sorgulama talimatlarını 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 tüm önbellekleri temizlemesi için uygulamanıza izin vermesini isteyin. Bunu yapmak için ACTION_CLEAR_APP_CACHE intent işlemini çağırın.

Harici depolama biriminde uygulamaya özel dizin

Android 11'den itibaren uygulamalar, harici depolamada kendi uygulamaya özel dizinlerini oluşturamaz. Sistemin uygulamanız için sağladığı dizine erişmek için getExternalFilesDirs() numaralı telefonu arayı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ılara kolaylık sunmak için medya dosyası gruplarını yönetmeyi kolaylaştıran çeşitli yöntemler ekler.

Dosyalara doğrudan dosya yollarını ve yerel kitaplıkları kullanarak erişin

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 dışındaki API'leri kullanmanıza olanak tanır. Bu API'ler şunlardır:

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

Diğer uygulamalardaki verilere erişim

Sistem, Android 11 veya sonraki sürümleri çalıştıran cihazlarda kullanıcı gizliliğini korumak için 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 dünya çapında erişimine açık hale getirebilecek uygulamaları kısıtlamaya başladı. Android 9 veya sonraki bir sürümü hedefleyen uygulamalar veri dizinlerindeki dosyaları herkes tarafından erişilebilir hale getiremez.

Android 11, bu kısıtlamanın kapsamını genişletiyor. Uygulamanız Android 11'i hedefliyorsa, Android 8.1 (API düzeyi 27) veya altını hedefleyen ve veri dizinindeki dosyaları herkes tarafından okunabilir hale getiren 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 hiçbir uygulamanın harici depolama alanındaki uygulamaya özel dizinindeki dosyalara erişemez.

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

Geliştiricilere test için zaman tanımak amacıyla Depolama 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

Artık ACTION_OPEN_DOCUMENT_TREE amaç işlemini kullanarak aşağıdaki dizinlere erişim isteğinde bulunamazsınız:

  • Dahili depolama biriminin kök dizini.
  • Kartın emüle edilmiş veya çıkarılabilir olması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 hacimdir.
  • Download dizini.

Dosyalara erişim

ACTION_OPEN_DOCUMENT_TREE veya ACTION_OPEN_DOCUMENT amaç işlemini kullanarak kullanıcıdan aşağıdaki dizinlerdeki dosyaları tek tek seçmesini isteyemezsiniz:

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

Değişikliği test et

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

  1. ACTION_OPEN_DOCUMENT işlemiyle bir amaç çağırın. Android/data/ ve Android/obb/ dizinlerinin görünmediğinden emin olun.
  2. Aşağıdakilerden birini yapın:
  3. ACTION_OPEN_DOCUMENT_TREE işlemiyle bir amaç ç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 izinleriyle ilgili aşağıdaki değişiklikleri kullanıma sunar.

Herhangi bir sürümü hedefleme

İlk iletişim kutusunda, Ayarlar'da İzin ver adlı bir bağlantı gösteriliyor
Şekil 1. Bir uygulama, kapsamlı depolamayı kullanıp READ_EXTERNAL_STORAGE iznini istediğinde gösterilen iletişim kutusu.

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

  • Depolama çalışma zamanı izni, Dosyalar ve Medya olarak yeniden adlandırılır.
  • Uygulamanız kapsamlı depolamayı devre dışı bırakmadıysa ve READ_EXTERNAL_STORAGE izni istiyorsa kullanıcılar Android 10'a kıyasla farklı bir iletişim kutusu görür. İletişim kutusu, Şekil 1'de gösterildiği gibi uygulamanızın fotoğraflara ve medyaya erişim istediğini belirtir.

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

Android 11'i hedefleme

Uygulamanız Android 11'i hedefliyorsa hem WRITE_EXTERNAL_STORAGE izni hem de WRITE_MEDIA_STORAGE özel izni artık ek erişim sağlamaz.

Uygulamanızın, Android 10 (API düzeyi 29) veya sonraki sürümleri çalıştıran cihazlarda depolamayla ilgili herhangi bir izin istemeden MediaStore.Downloads gibi iyi tanımlanmış medya koleksiyonlarına katkıda bulunabileceğini unutmayın. Uygulamanızdaki medya dosyalarıyla çalışırken yalnızca gerekli izinleri nasıl isteyeceğiniz hakkında daha fazla bilgi edinin.

Tüm dosyalara erişim

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 bunu gizliliği koruyan depolama en iyi uygulamaları kullanarak verimli bir şekilde yapamazlar. Android, bu durumlar için Tüm dosyalara erişim adı verilen özel bir uygulama erişimi sağlar. Daha fazla bilgi edinmek için bir depolama cihazındaki tüm dosyaları yönetme ile ilgili kılavuza bakın.

Ek kaynaklar

Android 11'deki depolama alanında yapılan değişiklikler hakkında daha fazla bilgi için aşağıdaki malzemeleri görüntüleyin:

Blog yayınları

Videolar