Android 4.4 (API düzeyi 19) ile birlikte Depolama Erişim Çerçevesi (SAF) kullanıma sunulmuştur. SAF, kullanıcıların tercih ettikleri tüm belge depolama sağlayıcıları genelinde belgelere, resimlere ve diğer dosyalara göz atıp bunları açmasına olanak tanır. Standart ve kullanımı kolay bir kullanıcı arayüzü, kullanıcıların uygulamalar ve sağlayıcılar arasında tutarlı bir şekilde dosyalara göz atmasını ve son dosyalara erişebilmesini sağlar.
Bulut veya yerel depolama hizmetleri, hizmetlerini kapsayan bir DocumentsProvider
uygulayarak bu ekosisteme katılabilir. Bir sağlayıcının belgelerine erişmesi gereken istemci uygulamaları, birkaç satır kodla SAF'e entegre edilebilir.
SAF aşağıdakileri içerir:
- Belge sağlayıcı: Google Drive gibi bir depolama hizmetinin, yönettiği dosyaları açığa çıkarmasına olanak tanıyan içerik sağlayıcı. Belge sağlayıcı,
DocumentsProvider
sınıfının alt sınıfı olarak uygulanır. Belge sağlayıcı şeması, geleneksel bir dosya hiyerarşisine dayanır, ancak belge sağlayıcınızın verileri fiziksel olarak nasıl depoladığı size bağlıdır. Android platformu; İndirilenler, Resimler ve Videolar gibi çeşitli yerleşik belge sağlayıcıları içerir. - İstemci uygulaması:
ACTION_CREATE_DOCUMENT
,ACTION_OPEN_DOCUMENT
veACTION_OPEN_DOCUMENT_TREE
amaç işlemlerini çağıran ve belge sağlayıcılar tarafından döndürülen dosyaları alan özel bir uygulama. - Seçici: Kullanıcıların, istemci uygulamasının arama ölçütlerini karşılayan tüm belge sağlayıcılarındaki dokümanlara erişmesini sağlayan sistem kullanıcı arayüzüdür.
SAF aşağıdaki özellikleri sunar:
- Kullanıcıların yalnızca tek bir uygulamaya değil, tüm doküman sağlayıcıların içeriklerine göz atmasına olanak tanır.
- Uygulamanızın, bir doküman sağlayıcısına ait dokümanlara uzun vadeli ve kalıcı bir şekilde erişebilmesini sağlar. Bu erişimle kullanıcılar sağlayıcıda dosya ekleyebilir, düzenleyebilir, kaydedebilir ve silebilir.
- Birden çok kullanıcı hesabını ve yalnızca sürücü takıldığında görünen USB depolama sağlayıcıları gibi geçici kökleri destekler.
Genel bakış
SAF, DocumentsProvider
sınıfının alt sınıfı olan bir içerik sağlayıcıyı merkeze alır. Belge sağlayıcıda veriler
geleneksel bir dosya hiyerarşisi olarak yapılandırılır:
Aşağıdakileri göz önünde bulundurun:
- Her belge sağlayıcısı, bir belge ağacını keşfetmek için başlangıç noktası olan bir veya daha fazla kök bildirir.
Her kökün benzersiz bir
COLUMN_ROOT_ID
öğesi vardır ve bu kökün altındaki içerikleri temsil eden bir dokümana (bir dizin) işaret eder. Kökler; birden çok hesap, geçici USB depolama cihazları veya kullanıcı girişi ve çıkış yapma gibi kullanım alanlarını destekleyecek şekilde dinamiktir. - Her kökün altında tek bir doküman bulunur. Bu belge 1 ila N dokümana işaret eder. Her biri de 1 ila N dokümana işaret edebilir.
- Her depolama arka ucu, benzersiz bir
COLUMN_DOCUMENT_ID
ile referans vererek bağımsız dosya ve dizinleri gösterir. Belge kimlikleri benzersizdir ve cihaz yeniden başlatmalarında kalıcı URI izinleri için kullanıldığından, yayınlandıktan sonra değişmez. - Dokümanlar, belirli bir MIME türüne sahip açılabilir bir dosya veya
MIME_TYPE_DIR
MIME türüne sahip ek dokümanlar içeren bir dizin olabilir. - Her dokümanın,
COLUMN_FLAGS
tarafından açıklandığı gibi farklı özellikleri olabilir. Örneğin,FLAG_SUPPORTS_WRITE
,FLAG_SUPPORTS_DELETE
veFLAG_SUPPORTS_THUMBNAIL
. AynıCOLUMN_DOCUMENT_ID
birden fazla dizine eklenebilir.
Kontrol akışı
Belge sağlayıcı veri modeli, geleneksel bir dosya hiyerarşisine dayanır. Bununla birlikte, DocumentsProvider
API'yi kullanarak erişebildiğiniz sürece verilerinizi istediğiniz gibi fiziksel olarak depolayabilirsiniz. Örneğin, verileriniz için etikete dayalı bulut depolama alanını kullanabilirsiniz.
Şekil 2'de, bir fotoğraf uygulamasının depolanan verilere erişmek için SAF'i nasıl kullanabileceği gösterilmektedir:
Aşağıdakileri göz önünde bulundurun:
- SAF'te, sağlayıcılar ve müşteriler doğrudan etkileşim kurmaz. Bir istemci dosyalarla etkileşim kurmak, yani dosyaları okumak, düzenlemek, oluşturmak veya silmek için izin ister.
- Etkileşim, bir uygulama (bu örnekte bir fotoğraf uygulaması)
ACTION_OPEN_DOCUMENT
veyaACTION_CREATE_DOCUMENT
amacını tetiklediğinde başlar. Amaç, "'image' MIME türüne sahip tüm açılabilir dosyaları bana ver" gibi, ölçütleri daha da hassaslaştırmak için filtreler içerebilir. - Niyet etkinleştiğinde sistem seçici, kayıtlı her sağlayıcıya gider ve eşleşen içeriklerin köklerini kullanıcıya gösterir.
- Seçici, temel belge sağlayıcıları çok farklı olsa bile kullanıcılara belgelere erişmek için standart bir arayüz sunar. Örneğin, şekil 2'de bir Google Drive sağlayıcısı, bir USB sağlayıcısı ve bir bulut sağlayıcı gösterilmektedir.
Şekil 3'te kullanıcı, resim aramasında açılmış bir seçiciden İndirilenler klasörünü seçmektedir. Seçici, ayrıca istemcide kullanılabilen tüm kökleri de gösterir.
Kullanıcı, İndirilenler klasörünü seçtikten sonra resimler görüntülenir. Şekil4'te bu işlemin sonucu gösterilmektedir. Kullanıcı artık resimlerle sağlayıcının ve istemci uygulamasının desteklediği şekilde etkileşimde bulunabilir.
İstemci uygulaması yazma
Android 4.3 ve önceki sürümlerde uygulamanızın başka bir uygulamadan dosya almasını istiyorsanız ACTION_PICK
veya ACTION_GET_CONTENT
gibi bir niyet çağırması gerekir. Kullanıcı daha sonra, dosya seçmek için
tek bir uygulama seçiyor. Seçilen uygulama, kullanıcının mevcut dosyalara göz atması ve dosyalar arasından seçim yapması için bir kullanıcı arayüzü sağlamalıdır.
Android 4.4 (API düzeyi 19) ve sonraki sürümlerde, kullanıcının diğer uygulamaların sunduğu tüm dosyalara göz atmasını sağlayan sistem tarafından kontrol edilen bir seçici kullanıcı arayüzü görüntüleyen ACTION_OPEN_DOCUMENT
amacını da kullanabilirsiniz. Kullanıcı, bu tek kullanıcı arayüzünden, desteklenen uygulamaların herhangi birinden dosya seçebilir.
Android 5.0 (API düzeyi 21) ve sonraki sürümlerde kullanıcının istemci uygulaması için bir dizin seçmesini sağlayan ACTION_OPEN_DOCUMENT_TREE
niyetini de kullanabilirsiniz.
Not: ACTION_OPEN_DOCUMENT
, ACTION_GET_CONTENT
cihazının yerine geçmez.
Kullanacağınız yöntem, uygulamanızın ihtiyaçlarına bağlıdır:
- Uygulamanızın veri okumasını veya içe aktarmasını istiyorsanız
ACTION_GET_CONTENT
kullanın. Bu yaklaşımla uygulama, verilerin bir kopyasını (ör. resim dosyası) içe aktarır. - Uygulamanızın bir belge sağlayıcısına ait dokümanlara uzun vadeli ve kalıcı bir şekilde erişebilmesini istiyorsanız
ACTION_OPEN_DOCUMENT
politikasını kullanın. Buna örnek olarak, kullanıcıların bir doküman sağlayıcıda depolanan resimleri düzenlemelerini sağlayan bir fotoğraf düzenleme uygulaması verilebilir.
Sistem seçici kullanıcı arayüzünü kullanarak dosyalara ve dizinlere göz atmanın nasıl destekleneceği hakkında daha fazla bilgi için belgelere ve diğer dosyalara erişim hakkındaki kılavuza bakın.
Ek kaynaklar
Belge sağlayıcılar hakkında daha fazla bilgi için aşağıdaki kaynaklardan yararlanın:
Sana Özel
Videolar
- DevBytes: Android 4.4 Depolama Erişim Çerçevesi: Sağlayıcı
- Depolama Erişim Çerçevesi'ndeki Sanal Dosyalar