Bir dosyayı uygulamanızdan başka bir uygulamaya güvenli bir şekilde sunmak için uygulamanızı, dosyaya içerik URI'si biçiminde güvenli bir herkese açık kullanıcı adı sunacak şekilde yapılandırmanız gerekir. Android FileProvider
bileşeni, XML'de sağladığınız özelliklere göre dosyalar için içerik URI'leri oluşturur. Bu derste, uygulamanıza varsayılan FileProvider
uygulamasını nasıl ekleyeceğiniz ve diğer uygulamalara sunmak istediğiniz dosyaları nasıl belirteceğiniz gösterilmektedir.
Not: FileProvider
sınıfı, AndroidX Core Library'nin bir parçasıdır. Bu kitaplığı uygulamanıza ekleme hakkında bilgi edinmek için Bağımlılıkları bildirme bölümünü inceleyin.
FileProvider’ı belirtin
Uygulamanız için bir FileProvider
tanımlamak amacıyla manifest dosyanızda bir giriş olması gerekir. Bu giriş, içerik URI'leri oluşturmada kullanma yetkisinin yanı sıra uygulamanızın paylaşabileceği dizinleri belirten XML dosyasının adını belirtir.
Aşağıdaki snippet'te FileProvider
sınıfını, yetkiliyi ve XML dosya adını belirten <provider>
öğesini manifest dosyanıza nasıl ekleyeceğiniz gösterilmektedir:
<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, FileProvider
tarafından oluşturulan içerik URI'leri için kullanmak istediğiniz URI yetkilisini belirtir.
Örnekteki yetkili kuruluş com.example.myapp.fileprovider
. Kendi uygulamanız için "fileprovider" dizesini ekleyerek uygulamanın android:package
değerinden oluşan bir yetkili belirtin. Yetki değeri hakkında daha fazla bilgi için İçerik URI'leri konusuna ve android:authorities
özelliğiyle ilgili dokümanlara bakın.
<provider>
öğesinin <meta-data>
alt öğesi, paylaşmak istediğiniz dizinleri belirten bir XML dosyasına işaret eder. android:resource
özelliği, .xml
uzantısı olmadan dosyanın yolu ve adıdır.Bu dosyanın içeriği sonraki bölümde açıklanmıştır.
Paylaşılabilir dizinleri belirtin
Uygulama manifestinize FileProvider
dosyasını ekledikten sonra paylaşmak istediğiniz dosyaları içeren dizinleri belirtmeniz gerekir. Dizinleri belirtmek için önce projenizin res/xml/
alt dizininde filepaths.xml
dosyasını oluşturarak başlayın. Bu dosyada, her dizin için bir XML öğesi ekleyerek dizinleri belirtin. Aşağıdaki snippet'te res/xml/filepaths.xml
içeriğinin bir örneği gösterilmektedir. Snippet, dahili depolama alanınızda files/
dizininin bir alt dizininin nasıl paylaşılacağını da gösterir:
<paths> <files-path path="images/" name="myimages" /> </paths>
Bu örnekte <files-path>
etiketi, uygulamanızın dahili depolama alanının files/
dizinindeki dizinleri paylaşır. path
özelliği, files/
dizininin images/
alt dizinini paylaşır. name
özelliği, FileProvider
özelliğine myimages
yol segmentini files/images/
alt dizinindeki dosyalar için içerik URI'lerine eklemesini belirtir.
<paths>
öğesinin, her biri paylaşılacak farklı bir dizin belirten birden fazla alt öğe olabilir. Dizinleri harici depolamada paylaşmak için <files-path>
öğesine ek olarak <external-path>
öğesini, dahili önbellek dizininizdeki dizinleri paylaşmak için <cache-path>
öğesini kullanabilirsiniz. Paylaşılan dizinleri belirten alt öğeler hakkında daha fazla bilgi edinmek için FileProvider
referans belgelerini inceleyin.
Not: Paylaşmak istediğiniz dizinleri belirtmenin tek yolu XML dosyasıdır. Programla bir dizin ekleyemezsiniz.
Uygulamanızın dahili depolama alanının files/
dizininde bulunan veya files/
alt dizinlerindeki dosyalar için içerik URI'leri oluşturan bir FileProvider
spesifikasyonuna artık sahipsiniz. Uygulamanız bir dosya için içerik URI'si oluşturduğunda, <provider>
öğesinde (com.example.myapp.fileprovider
) belirtilen yetkiyi, myimages/
yolunu ve dosyanın adını içerir.
Örneğin, bu dersteki snippet'lere göre bir FileProvider
tanımlarsanız ve default_image.jpg
dosyası için bir içerik URI'si isterseniz FileProvider
, aşağıdaki URI'yi döndürür:
content://com.example.myapp.fileprovider/myimages/default_image.jpg
İlgili daha fazla bilgi için aşağıdaki konulara bakın: