Android 4.4 (API düzeyi 19), Depolama Aksesuarı Çerçevesi'ni (SAF) kullanıma sunar. SAF, kullanıcıların tercih ettikleri tüm doküman depolama alanı sağlayıcılardaki dokümanlara, resimlere ve diğer dosyalara göz atmasına ve bunları açmaları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ına ve son dosyalara erişmesine olanak tanır.
Bulut veya yerel depolama hizmetleri, hizmetlerini kapsayan bir DocumentsProvider
uygulayarak bu ekosisteme katılabilir. Bir sağlayıcının dokümanlarına erişmesi gereken istemci uygulamaları, birkaç kod satırı ile SAF ile entegre edilebilir.
SAF şunları içerir:
- Doküman sağlayıcı: Google Drive gibi bir depolama hizmetinin, yönettiği dosyaları göstermesine olanak tanıyan bir 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şisini temel alır ancak belge sağlayıcınızın verileri fiziksel olarak nasıl depoladığını belirleme hakkı size aittir. Android platformunda İndirilenler, Resimler ve Videolar gibi çeşitli yerleşik doküman sağlayıcılar bulunur. - İstemci uygulaması:
ACTION_CREATE_DOCUMENT
,ACTION_OPEN_DOCUMENT
veACTION_OPEN_DOCUMENT_TREE
istem işlemlerini çağıran ve belge sağlayıcılar tarafından döndürülen dosyaları alan özel bir uygulamadır. - Seçici: Kullanıcıların, istemci uygulamasının arama ölçütlerini karşılayan tüm doküman sağlayıcılardaki dokümanlara erişmesine olanak tanıyan bir sistem kullanıcı arayüzü.
SAF aşağıdaki özellikleri sunar:
- Kullanıcıların yalnızca tek bir uygulamadan değil, tüm doküman sağlayıcılardaki içeriklere göz atmasına olanak tanır.
- Uygulamanızın, bir doküman sağlayıcıya ait dokümanlara uzun süreli ve kalıcı erişmesine olanak tanır. Bu erişim sayesinde kullanıcılar sağlayıcıda dosya ekleyebilir, düzenleyebilir, kaydedebilir ve silebilir.
- Birden fazla kullanıcı hesabını ve yalnızca sürücü takılıyken görünen USB depolama alanı 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ı temel alır. Belge sağlayıcıda veriler geleneksel dosya hiyerarşisi olarak yapılandırılır:

Aşağıdakileri göz önünde bulundurun:
- Her doküman sağlayıcı, bir veya daha fazla kök bildirir. Bunlar, doküman ağacını keşfetmeye yönelik başlangıç noktalarıdır.
Her kökün benzersiz bir
COLUMN_ROOT_ID
öğesi vardır ve bu öğe, söz konusu kökün altındaki içerikleri temsil eden bir dokümanı (dizin) işaret eder. Kökler, birden fazla hesap, geçici USB depolama cihazları veya kullanıcı girişi ve çıkışı gibi kullanım alanlarını desteklemek için tasarım gereği dinamiktir. - Her kökün altında tek bir doküman bulunur. Bu doküman, 1 ila N dokümanı işaret eder. Bu dokümanların her biri de 1 ila N dokümanı işaret edebilir.
- Her depolama arka ucu, benzersiz bir
COLUMN_DOCUMENT_ID
ile referans vererek ayrı dosyaları ve dizinleri gösterir. Doküman kimlikleri benzersizdir ve cihaz yeniden başlatılırken 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 dahil edilebilir.
Kontrol akışı
Belge sağlayıcı veri modeli, geleneksel bir dosya hiyerarşisini temel alır. Ancak, DocumentsProvider
API'yi kullanarak erişebildiğiniz sürece verilerinizi fiziksel olarak istediğiniz şekilde saklayabilirsiniz. Örneğin, verileriniz için etiket tabanlı bulut depolama alanı kullanabilirsiniz.
Şekil 2'de, bir fotoğraf uygulamasının depolanan verilere erişmek için SAF'ı nasıl kullanabileceği gösterilmektedir:

Aşağıdakileri göz önünde bulundurun:
- SAF'ta sağlayıcılar ve istemciler doğrudan etkileşime girmez. Müşteri, dosyalarla etkileşim kurmak için izin ister. Bu, dosya okuma, düzenleme, oluşturma veya silme anlamına gelir.
- Etkileşim, bir uygulama (bu örnekte fotoğraf uygulaması)
ACTION_OPEN_DOCUMENT
veyaACTION_CREATE_DOCUMENT
intent'ini tetiklediğinde başlar. Intent, ölçütleri daha da hassaslaştırmak için filtreler içerebilir. Örneğin, ""image" MIME türüne sahip tüm açılabilir dosyaları göster". - Intent tetiklendiğinde sistem seçici, kayıtlı her sağlayıcıya gider ve kullanıcıya eşleşen içerik köklerini gösterir.
- Seçici, temel doküman sağlayıcılar çok farklı olsa bile kullanıcılara dokümanlara erişmek için standart bir arayüz sunar. Örneğin, 2. şekil bir Google Drive sağlayıcısı, USB sağlayıcısı ve bulut sağlayıcısı göstermektedir.
Şekil 3'te kullanıcı, resim araması sırasında açılan bir seçiciden İndirilenler klasörünü seçiyor. Seçici, istemci uygulamasının kullanabileceği tüm kökleri de gösterir.
Kullanıcı İndirilenler klasörünü seçtikten sonra resimler gösterilir. Şekil 4'te bu işlemin sonucu gösterilmektedir. Kullanıcı artık sağlayıcı ve istemci uygulamasının desteklediği şekillerde resimlerle etkileşime geçebilir.
İ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 intent çağırması gerekir. Ardından kullanıcı, dosya seçeceği tek bir uygulama belirler. Seçilen uygulama, kullanıcının mevcut dosyalara göz atıp 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 kullanıma sunduğu tüm dosyalara göz atmasına olanak tanıyan sistem kontrollü bir seçici kullanıcı arayüzü gösteren ACTION_OPEN_DOCUMENT
intent'ini kullanma seçeneğiniz de vardır. Kullanıcı, bu tek kullanıcı arayüzünden desteklenen uygulamalardan herhangi birinde bir dosya seçebilir.
Android 5.0 (API düzeyi 21) ve sonraki sürümlerde, kullanıcının istemci uygulamasının erişeceği bir dizin seçmesine olanak tanıyan ACTION_OPEN_DOCUMENT_TREE
intent'i de kullanabilirsiniz.
Not: ACTION_OPEN_DOCUMENT
, ACTION_GET_CONTENT
'in yerini almaz.
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
seçeneğini kullanın. Bu yaklaşımda uygulama, verilerin bir kopyasını (ör. resim dosyası) içe aktarır. - Uygulamanızın bir doküman sağlayıcıya ait dokümanlara uzun süreli ve kalıcı erişimi olmasını istiyorsanız
ACTION_OPEN_DOCUMENT
değerini kullanın. Örneğin, kullanıcıların bir doküman sağlayıcıda depolanan resimleri düzenlemesine olanak tanıyan bir fotoğraf düzenleme uygulaması.
Sistem seçici kullanıcı arayüzünü kullanarak dosya ve dizinlere göz atma özelliğini destekleme hakkında daha fazla bilgi için belgelere ve diğer dosyalara erişme başlıklı kılavuzu inceleyin.
Ek kaynaklar
Belge sağlayıcılar hakkında daha fazla bilgi için aşağıdaki kaynaklardan yararlanabilirsiniz:
Örnekler
Videolar
- DevBytes: Android 4.4 Depolama Alanı Erişim Çerçevesi: Sağlayıcı
- Depolama Erişim Çerçevesi'ndeki Sanal Dosyalar