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
berdasarkan
dalam pelajaran ini, dan Anda meminta URI konten untuk file tersebut
default_image.jpg
, FileProvider
akan menampilkan
URI berikut:
content://com.example.myapp.fileprovider/myimages/default_image.jpg
Untuk informasi terkait lainnya, lihat: