Dosya paylaşımını ayarlama

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: