Depolama Erişim Çerçevesi'ni kullanarak dosya açma

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 ve ACTION_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:

veri modeli

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 ve FLAG_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:

uygulama

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 veya ACTION_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.

Sistem seçicide klasör seçiminin ekran görüntüsü

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.

İndirilenler klasörünün ekran görüntüsü

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:

Sana Özel

Videolar