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, medya için toplu düzenleme işlemleri ve Depolama Erişim Çerçevesi'nin güncellenmiş kullanıcı arayüzü gibi çeşitli iyileştirmeler sunuluyor.
Bu sürümde ayrıca kapsamlı depolama ile ilgili iyileştirmeler de yer alıyor. Bu iyileştirmeler, geliştiricilerin bu depolama modeline geçtikten sonra depolama alanı kullanım alanlarını karşılamasını kolaylaştırıyor.
Kısıtlı depolama zorunluluğu
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ı depolamayla ilişkili değişiklikleri geçici olarak devre dışı bırakmasına (ör. farklı dizinlere ve farklı türlerdeki medya dosyalarına erişim izni verme) 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. Bu sayede, uygulamanız Android 10 çalıştıran cihazlarda beklendiği gibi davranmaya devam edebilir.
Verileri, kapsamlı depolama kullanılırken görünen dizinlere taşıma
Uygulamanız eski depolama modelini kullanıyorsa ve daha önce Android 10 veya daha eski sürümleri hedefliyorsa kapsamlı depolama modeli etkinleştirildiğinde uygulamanızın erişemeyeceği bir dizinde veri depoluyor olabilirsiniz. Android 11'i hedeflemeden önce verileri taşıyın. Bu işlem için kapsamlı depolama ile uyumlu bir dizin kullanın.
Kısıtlı depolamayı test etme
Uygulamanızın hedef SDK sürümünden ve manifest işaret değerlerinden bağımsız olarak uygulamanızda kapsamlı depolamayı etkinleştirmek için aşağıdaki uygulama uyumluluğu işaretlerini etkinleştirin:
DEFAULT_SCOPED_STORAGE
(varsayılan olarak tüm uygulamalar için etkinleştirilir)FORCE_ENABLE_SCOPED_STORAGE
(varsayılan olarak tüm uygulamalar için devre dışıdır)
Kapsamlı depolamayı devre dışı bırakmak ve bunun yerine eski depolama modelini kullanmak için her iki işareti de kaldırın.
Cihaz depolama alanını yönetme
Android 11'den itibaren, kapsamlı depolama modelini kullanan uygulamalar yalnızca kendi uygulamalarına özel önbellek dosyalarına erişebilir. Uygulamanızın cihaz depolama alanını yönetmesi gerekiyorsa boş alanı sorgulama ile ilgili talimatları uygulayın.
ACTION_MANAGE_STORAGE
amaç işlemini çağırarak boş alan olup olmadığını kontrol edin.Cihazda yeterli boş alan yoksa kullanıcıdan uygulamanıza tüm önbellekleri temizleme izni vermesini isteyin. Bunu yapmak için
ACTION_CLEAR_APP_CACHE
amaçlı 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
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 ve kullanıcı kolaylığı sağlamak 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
Android 11, uygulamanızın üçüncü taraf medya kitaplıklarıyla daha sorunsuz çalışmasına yardımcı olmak için MediaStore
API dışında API'ler kullanarak doğrudan dosya yolları aracılığıyla paylaşılan depolama alanındaki medya dosyalarına erişmenize olanak tanır. Bu API'ler şunları içerir:
File
API'si.fopen()
gibi yerel kitaplıklar.
Diğer uygulamalardaki verilere erişim
Android 11 veya sonraki sürümlerin yüklü olduğu cihazlarda, kullanıcı gizliliğini korumak için 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 depolamadaki veri dizinlerinde bulunan dosyaları diğer uygulamalar için dünya genelinde erişilebilir hale getirebilecek uygulamaları kısıtlamaya başladı. Android 9 veya daha yeni sürümleri hedefleyen uygulamalar, veri dizinlerindeki dosyaları herkese açık hale getiremez.
Android 11, bu kısıtlamayı genişletir. Uygulamanız Android 11'i hedefliyorsa başka bir uygulamanın veri dizinindeki dosyalara erişemez. Bu durum, diğer uygulama Android 8.1'i (API düzeyi 27) veya daha eski bir sürümü hedeflese ve veri dizinindeki dosyaları herkes tarafından okunabilir hale getirse bile geçerlidir.
Harici depolama alanındaki uygulamaya özel dizinlere erişim
Android 11'de uygulamalar artık harici depolamadaki diğer uygulamaların uygulamaya özel ayrılmış dizinindeki dosyalara erişemez.
Belge erişimi kısıtlamaları
Geliştiricilere test için zaman tanımak amacıyla, Depolama Erişimi Ç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 isteğinde bulunmak için
ACTION_OPEN_DOCUMENT_TREE
amaç 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, uygulamanın çoğu zaman başarılı bir şekilde 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
amaç 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:
ACTION_OPEN_DOCUMENT
işlemiyle bir amaca ulaşma isteğini çağırın.Android/data/
veAndroid/obb/
dizinlerinin görünmediğini kontrol edin.- Aşağıdakilerden birini yapın:
RESTRICT_STORAGE_ACCESS_FRAMEWORK
uygulama uyumluluğu işaretini etkinleştirin.- Android 11 veya sonraki sürümleri hedefleyin.
ACTION_OPEN_DOCUMENT_TREE
işlemiyle bir amaca ulaşma isteğini çağırın.Download
dizininin göründüğünü ve dizinle ilişkili işlem düğmesinin gri renkte olduğunu kontrol edin.
İzinler
Android 11, depolama izinleriyle ilgili aşağıdaki değişiklikleri sunar.
Herhangi bir sürümü hedefleme
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 ö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ür. İletişim kutusunda, uygulamanızın fotoğraf ve medyaya erişim isteğinde bulunduğu belirtiliyor (Ş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 verilir 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 bu dosyalara yazmak için tü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
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, depolamayla 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ı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 koruyan depolama alanıyla ilgili en iyi uygulamaları 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 hakkındaki kılavuza bakın.
Ek kaynaklar
Android 11'deki depolama alanı değişiklikleri hakkında daha fazla bilgi için aşağıdaki materyallere göz atın: