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ı verilerine 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 sunulmuştur.

Bu sürümde, kapsamlı depolama alanında da iyileştirmeler yapıldı. Bu iyileştirmeler, geliştiricilerin bu depolama alanı modeline geçtikten sonra depolama alanı kullanım alanlarını karşılamasını kolaylaştırıyor.

Kapsamlı depolama alanı yaptırımı

Android 11 üzerinde çalışan ancak Android 10'u (API düzeyi 29) hedefleyen uygulamalar yine de requestLegacyExternalStorage özelliğini isteyebilir. Bu işaret, uygulamaların kapsamlı depolama alanıyla ilişkili değişiklikleri geçici olarak devre dışı bırakmasına olanak tanır (ör. farklı dizinlere ve farklı medya dosyası türlerine erişim izni verme). 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 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 modelini kullanıyorsa ve daha önce Android 10 veya önceki sürümleri hedefliyorsa kapsamlı depolama modeli etkinleştirildiğinde verileri uygulamanızın erişemeyeceği bir dizinde depoluyor olabilirsiniz. Android 11'i hedeflemeden önce, verileri kapsamlı depolama ile uyumlu bir dizine taşıyın.

Kısıtlı depolama alanını test etme

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

Kapsamlı depolama alanını devre dışı bırakıp 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 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 ile ilgili talimatları uygulayın.

  1. ACTION_MANAGE_STORAGE intent işlemini çağırarak boş alanı kontrol edin.
  2. Cihazda yeterli boş alan yoksa tüm önbellekleri temizlemek için kullanıcıdan uygulamanıza 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 dizin oluşturamaz. Sistemin uygulamanız için sağladığı dizine erişmek üzere getExternalFilesDirs() işlevini çağırın.

Medya dosyası erişimi

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

Toplu işlemler gerçekleştirme

Cihazlar arasında tutarlılık ve daha fazla kullanıcı kolaylığı için Android 11, 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 üzere MediaStore API 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

Sistem, kullanıcı gizliliğini korumak için Android 11 veya sonraki sürümleri çalıştıran cihazlarda 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 dizinlerindeki dosyaları diğer uygulamaların erişimine açık hale getirecek uygulamaları kısıtlamaya başladı. Android 9 veya sonraki sürümleri hedefleyen uygulamalar veri dizinlerindeki dosyaları herkese açık hale getiremez.

Android 11 bu kısıtlamanın kapsamını genişletiyor. Uygulamanız Android 11'i hedefliyorsa diğer uygulama Android 8.1'i (API düzeyi 27) veya daha eski bir sürümü hedefliyorsa ve veri dizinindeki dosyaları herkese açık hale getirmiş olsa bile diğer 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 özel, uygulamaya özel dizininde bulunan dosyalara erişemez.

Belge 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 aşağıdaki dizinlere erişim izni istemek için ACTION_OPEN_DOCUMENT_TREE intent işlemini kullanamazsınız:

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

Dosyalara erişim

Artık kullanıcıdan aşağıdaki dizinlerden tek tek dosya seçmesini istemek için 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 çağırın. Hem Android/data/ hem de Android/obb/ dizinlerinin 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ışı bırakıldığından emin olun.

İzinler

Android 11'de, depolama izinleriyle ilgili aşağıdaki değişiklikler kullanıma sunulmaktadır.

Herhangi bir sürümü hedefleme

İlk iletişim kutusunda, Ayarlar'da izin ver adlı bir bağlantı gösterilir.
Şekil 1. Bir uygulama, kapsamlı depolama alanını kullandığında ve 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 alanı çalışma zamanı izninin adı Dosyalar ve Medya olarak değiştirildi.
  • Uygulamanız kapsamlı depolama alanı özelliğini devre dışı bırakmadıysa ve READ_EXTERNAL_STORAGE iznini istiyorsa kullanıcılar Android 10'a kıyasla farklı bir iletişim kutusu görürler. Şekil 1'de gösterildiği gibi, iletişim kutusu uygulamanızın fotoğraflara ve medyaya erişim istediğini belirtir.

    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, izin sahibi her uygulama Tüm dosyalar için izin veriliyor bölümünde listelenir. Uygulamanız Android 11'i hedefliyorsa "tüm dosyalara" yönelik bu erişimin salt okuma olduğunu unutmayın. Bu uygulamayı kullanarak paylaşılan depolama alanındaki tüm dosyaları okuyup yazmak için tüm dosyalara erişim izniniz olmalıdır.

Android 11'i hedefleme

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

Android 10 (API düzeyi 29) veya sonraki sürümleri çalıştıran cihazlarda uygulamanızın, depolamayla ilgili herhangi bir izin 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 nasıl isteyeceğiniz hakkında daha fazla bilgi edinin.

Tüm dosyalara erişim

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ş erişim gerektirir ancak gizlilik dostu depolama alanı en iyi uygulamalarını kullanarak bu erişimi verimli bir şekilde sağlayamaz. Android, bu durumlar için Tüm dosyalara erişim adlı özel bir uygulama erişimi sağlar. Daha fazla bilgi edinmek için depolama cihazındaki tüm dosyaları yönetme konulu kılavuzu inceleyin.

Ek kaynaklar

Android 11'de depolama alanıyla ilgili değişiklikler hakkında daha fazla bilgi için aşağıdaki materyalleri görüntüleyin:

Blog yayınları

Videolar