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

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

veri modeli

Şekil 1. Doküman sağlayıcı veri modeli. Kök, tek bir dokümana işaret eder ve daha sonra ağacın fanını başlatı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 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, 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 veya ACTION_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.

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

3. Şekil. Arama konumu olarak İndirilenler klasörünün seçildiğini gösteren seçici.

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.

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

4. Şekil. Sistem seçicide göründüğü şekliyle İndirilenler klasöründe depolanan resimler.

İ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