Android 4.4 (API düzeyi 19), Depolama Erişim Çerçevesi'ni (SAF) kullanıma sunuyor. SAF, kullanıcıların tercih ettikleri tüm belge depolama sağlayıcıları genelinde dokümanlara, resimlere ve diğer dosyalara göz atmasına ve 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 dosyalara göz atmasına ve son dosyalara tutarlı bir şekilde erişmesine olanak tanır.
Bulut veya yerel depolama hizmetleri, hizmetlerini içeren bir DocumentsProvider
uygulayarak bu ekosisteme katılabilir. Bir sağlayıcının belgelerine erişmesi gereken istemci uygulamaları birkaç satır kodla SAF ile entegre edilebilir.
SAF’de şu konular yer almaktadır:
- Doküman sağlayıcı: Google Drive gibi bir depolama hizmetinin, yönettiği dosyaları açığa çıkarmasına 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 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 uygulamadır. - Seçici: Kullanıcıların, istemci uygulamasının arama ölçütlerini karşılayan tüm doküman sağlayıcılarının belgelerine erişmesini sağlayan bir sistem kullanıcı arayüzüdür.
SAF aşağıdaki özellikleri sunar:
- Kullanıcıların yalnızca tek bir uygulamadan değil, tüm doküman sağlayıcılarındaki içeriğe göz atmasına olanak tanır.
- Uygulamanızın, bir doküman sağlayıcısına ait dokümanlara uzun vadeli, kalıcı erişime sahip olmasını sağlar. Bu erişim sayesinde kullanıcılar sağlayıcıda dosya ekleyebilir, mevcut dosyaları düzenleyebilir, kaydedebilir ve silebilir.
- Birden fazla kullanıcı hesabını ve yalnızca sürücü takılı olduğunda 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ısını merkeze alır. Bir belge sağlayıcısında veriler geleneksel bir dosya hiyerarşisi gibi yapılandırılır:
1. Şekil. Doküman sağlayıcı veri modeli. Kök, tek bir belgeyi işaret eder ve ardından ağaçta yayılmaya başlar.
Aşağıdakileri göz önünde bulundurun:
- Her belge sağlayıcısı, bir belge ağacını keşfetmeye 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ümanı (dizini) işaret eder. Kökler; birden fazla hesap, geçici USB depolama cihazları veya kullanıcı girişi ve oturumu kapatma gibi kullanım alanlarını destekleyecek şekilde dinamiktir. - Her kökün altında tek bir doküman bulunur. Bu belge 1 - N belgeye işaret ediyor. Bunların her biri de 1 - N dokümanı işaret edebilir.
- Her depolama arka ucu, benzersiz bir
COLUMN_DOCUMENT_ID
ile referans vererek bağımsız dosya ve dizinleri sunar. Belge kimlikleri benzersizdir ve cihaz yeniden başlatmalarında kalıcı URI izinleri için kullanıldığından bir kez 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,
COLUMN_FLAGS
sayfasında açıklandığı gibi farklı özelliklere sahip 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:
2. Şekil. Depolama Erişim Çerçevesi akışı.
Aşağıdakileri göz önünde bulundurun:
- SAF'te ise sağlayıcılar ve müşteriler doğrudan etkileşime girmez. İstemci dosyalarla etkileşim kurmak, yani dosya 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ı ver" gibi, ölçütleri daha da hassaslaştırmak için filtreler içerebilir. - Niyet tetiklendiğinde, sistem seçici her kayıtlı sağlayıcıya gider ve kullanıcıya eşleşen içeriğin köklerini gösterir.
- Temel belge sağlayıcıları çok farklı olsa bile seçici, kullanıcılara dokümanlara 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çılan bir seçiciden İndirilenler klasörünü seçmektedir. Seçici, istemci uygulamasında kullanılabilen tüm kökleri de gösterir.
3. Şekil. İndirilenler klasörünün gösterildiği seçici arama konumu olarak seçildi.
Kullanıcı, İndirilenler klasörünü seçtikten sonra, resimler görüntülenir. Şekil 4'te bu işlemin sonucu gösterilmektedir. Kullanıcı artık sağlayıcı ve istemci uygulamasının desteklediği şekilde resimlerle etkileşimde bulunabilir.
4. Şekil. Sistem seçicide görüntülendiği şekliyle İndirilenler klasöründe depolanan resimler.
İstemci uygulaması yazın
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 amacı çağırması gerekir. Ardından, kullanıcı, dosya seçmek için
tek bir uygulama seçer. Seçilen uygulama, kullanıcının mevcut dosyalara göz atması ve dosyalar arasından seçim yapabilmesi 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örüntüleyen ACTION_OPEN_DOCUMENT
amacını kullanma seçeneğiniz de vardır. 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 bir istemci uygulaması için bir dizin seçmesine olanak tanıyan ACTION_OPEN_DOCUMENT_TREE
amacını da kullanabilirsiniz.
Not: ACTION_OPEN_DOCUMENT
, ACTION_GET_CONTENT
öğesinin yerine geçmez.
Kullanacağınız araç, 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şımda 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, kalıcı erişim sahibi olmasını istiyorsanız
ACTION_OPEN_DOCUMENT
kullanın. Örnek olarak, kullanıcıların bir doküman sağlayıcıda depolanan resimleri düzenlemesine olanak tanıyan 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 dokümanlara ve diğer dosyalara erişim ile ilgili kılavuza bakın.
Ek kaynaklar
Belge sağlayıcıları hakkında daha fazla bilgi için aşağıdaki kaynaklardan yararlanın: