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: