Uygulamanızdan başka bir uygulamaya güvenli bir şekilde dosya sunmak için uygulamanızı dosya için içerik URI'si biçiminde güvenli bir tutma yeri. Android FileProvider
bileşeni, şunlar için içerik URI'leri oluşturur: dosyaları, XML'de sağladığınız özelliklere göre oluşturulur. Bu derste, varsayılan uygulamanıza FileProvider
uygulanması ve diğer uygulamalara sunmak istediğiniz dosyaları belirtin.
Not: FileProvider
sınıfı AndroidX Core Kitaplığı. Daha fazla bilgi için hakkında bilgi edinmek için bkz. Bağımlılıkları bildirme.
FileProvider’ı belirt
Uygulamanız için FileProvider
tanımlamak üzere manifest dosyanız. Bu giriş, hem içerik URI'leri oluştururken hem de uygulamanızın paylaşabileceği dizinleri belirten XML dosyasının adı.
Aşağıdaki snippet, Şunları belirten <provider>
öğesi FileProvider
sınıfı, yetkili kurum ve XML dosyasının adı:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapp"> <application ...> <provider android:name="androidx.core.content.FileProvider" android:authorities="com.example.myapp.fileprovider" android:grantUriPermissions="true" android:exported="false"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/filepaths" /> </provider> ... </application> </manifest>
Bu örnekte, android:authorities
özelliği URI yetkilisini belirtir. tarafından oluşturulan içerik URI'leri için kullanmak istediğiniz FileProvider
. Örnekte yetkili com.example.myapp.fileprovider
. Kendiniz için uygulamanızın "fileprovider" dizesine sahip android:package
değeri eklenir. Daha fazla bilgi edinmek için hakkında bilgi için İçerik URI'leri ve android:authorities
özelliği.
Şu öğenin <meta-data>
alt öğesi: <provider>
, eklemek istediğiniz dizinleri belirten bir XML dosyasını işaret eder paylaşacağım. android:resource
özelliği, .xml
uzantısı.Bu dosyanın içeriği sonraki bölümde açıklanmıştır.
Paylaşılabilir dizinleri belirtin
FileProvider
öğesini uygulama manifestinize ekledikten sonra, paylaşmak istediğiniz dosyaları içeren dizinleri belirtmeniz gerekir. Bir res/xml/
içinde filepaths.xml
dosyasını oluşturarak başlayın alt dizininde bulabilirsiniz. Bu dosyada her dizin için geçerlidir. Aşağıdaki snippet, res/xml/filepaths.xml
Snippet, bir alt dizinin nasıl paylaşılacağını da gösterir dahili depolama alanınızdaki files/
dizini için:
<paths> <files-path path="images/" name="myimages" /> </paths>
Bu örnekte, <files-path>
etiketi Uygulamanızın dahili depolama alanının files/
dizini. path
özelliği files/
sitesinin images/
alt dizinini paylaşır. name
özelliği, FileProvider
öğesine yol segmentini eklemesini belirtir files/images/
alt dizinindeki dosyaların içerik URI'lerine myimages
eklemek.
<paths>
öğesinin, her biri farklı bir değer belirten birden çok alt öğesi olabilir bir dizindir. <files-path>
öğesine ek olarak şunları da yapabilirsiniz: harici depolama alanındaki dizinleri paylaşmak için <external-path>
öğesini kullanın ve dahili önbelleğinizdeki dizinleri paylaşmak için <cache-path>
öğesi dizin. Paylaşılan dizinleri belirten alt öğeler hakkında daha fazla bilgi edinmek için FileProvider
referans belgeleri.
Not: XML dosyası, eklemek istediğiniz dizinleri belirtmenin tek yoludur. paylaşma; programlı bir şekilde dizin ekleyemezsiniz.
Artık FileProvider
ile ilgili eksiksiz özelliklere sahipsiniz uygulamanızın files/
dizinindeki dosyalar için içerik URI'ları oluşturan dahili depolama alanı veya files/
alt dizinlerindeki dosyalar için geçerlidir. Uygulamanız bir içerik URI'sı içeriyorsa, <provider>
öğesi (com.example.myapp.fileprovider
), myimages/
yolunu ve dosyanın adını içerir.
Örneğin, FileProvider
bir snippet'lerini kullanabilir ve dosya için bir içerik URI'si default_image.jpg
, FileProvider
şunu döndürür: aşağıdaki URI:
content://com.example.myapp.fileprovider/myimages/default_image.jpg
Daha fazla ilgili bilgi için aşağıdaki kaynakları inceleyebilirsiniz: