Dosya paylaşımını ayarlama

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: