Menyiapkan fitur berbagi file

Untuk menawarkan file dengan aman dari aplikasi Anda ke aplikasi lain, konfigurasikan aplikasi Anda agar menawarkan penanganan aman ke file tersebut, dalam bentuk URI konten. Komponen FileProvider Android menghasilkan URI konten untuk file, berdasarkan spesifikasi yang Anda berikan dalam XML. Tutorial ini menunjukkan cara menambahkan implementasi default FileProvider ke aplikasi Anda, dan cara menentukan file yang ingin ditawarkan ke aplikasi lain.

Catatan: Class FileProvider adalah bagian dari AndroidX Core Library. Untuk informasi tentang menyertakan library ini dalam aplikasi Anda, lihat Mendeklarasikan dependensi.

Menentukan FileProvider

Penentuan FileProvider untuk aplikasi memerlukan suatu entri dalam manifes Anda. Entri ini menentukan otoritas yang akan digunakan dalam pembuatan URI konten, serta nama file XML yang menentukan direktori yang dapat dibagikan oleh aplikasi Anda.

Cuplikan berikut menunjukkan Anda cara menambahkan ke manifes elemen <provider> yang menentukan class FileProvider, otoritas, dan nama file XML:

<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>

Dalam contoh ini, atribut android:authorities menentukan otoritas URI yang ingin Anda gunakan untuk URI konten yang dihasilkan oleh FileProvider. Dalam contoh tersebut, otoritasnya adalah com.example.myapp.fileprovider. Untuk aplikasi Anda sendiri, tentukan otoritas yang terdiri dari nilai android:package aplikasi dengan menambahkan string "fileprovider" ke dalamnya. Untuk mempelajari nilai otoritas lebih lanjut, lihat topik URI Konten dan dokumentasi untuk atribut android:authorities.

Elemen turunan <meta-data> dari <provider> menunjuk ke file XML yang menentukan direktori yang ingin Anda bagikan. Atribut android:resource adalah jalur dan nama file, tanpa ekstensi .xml. Isi file ini dijelaskan di bagian berikutnya.

Menentukan direktori yang dapat dibagikan

Setelah Anda menambahkan file FileProvider pada manifes aplikasi, Anda harus menentukan direktori yang berisi file yang ingin dibagikan. Untuk menentukan direktori, mulai dengan membuat file filepaths.xml di subdirektori res/xml/ project Anda. Dalam file ini, tentukan direktori dengan menambahkan elemen XML untuk setiap direktori. Cuplikan berikut menampilkan contoh konten res/xml/filepaths.xml. Cuplikan ini juga menunjukkan cara berbagi subdirektori dari direktori files/ di area penyimpanan internal Anda:

<paths>
    <files-path path="images/" name="myimages" />
</paths>

Dalam contoh ini, tag <files-path> membagikan direktori dalam direktori files/ penyimpanan internal aplikasi Anda. Atribut path membagikan subdirektori images/ dari files/. Atribut name memberi tahu FileProvider untuk menambahkan segmen jalur myimages ke URI konten untuk file dalam subdirektori files/images/.

Elemen <paths> dapat memiliki beberapa turunan, masing-masing menentukan direktori yang berbeda untuk dibagikan. Selain elemen <files-path>, Anda dapat menggunakan elemen <external-path> untuk membagikan direktori di penyimpanan eksternal, dan elemen <cache-path> untuk membagikan direktori dalam direktori cache internal Anda. Untuk mempelajari lebih lanjut tentang elemen turunan yang menentukan direktori bersama, lihat dokumentasi referensi FileProvider.

Catatan: File XML adalah satu-satunya cara agar Anda dapat menentukan direktori yang ingin dibagikan; Anda tidak dapat menambahkan direktori secara terprogram.

Sekarang Anda memiliki spesifikasi FileProvider lengkap yang menghasilkan URI konten untuk file dalam direktori files/ dari penyimpanan internal aplikasi atau untuk file dalam subdirektori files/. Saat aplikasi Anda menghasilkan URI konten untuk file, aplikasi akan berisi otoritas yang ditentukan dalam elemen <provider> (com.example.myapp.fileprovider), jalur myimages/, dan nama file.

Misalnya, jika Anda menentukan FileProvider sesuai dengan cuplikan dalam tutorial ini, dan meminta URI konten untuk file default_image.jpg, FileProvider akan menampilkan URI berikut:

content://com.example.myapp.fileprovider/myimages/default_image.jpg

Untuk informasi terkait lainnya, lihat: