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: