Cómo configurar el uso compartido de archivos

Si quieres ofrecer un archivo de tu app a otra de forma segura, debes configurar la app para que ofrezca un controlador seguro del archivo, en forma de URI de contenido. Android El componente FileProvider genera URI de contenido para de acuerdo con las especificaciones que proporciones en formato XML. En esta lección, se muestra cómo agregar implementación de FileProvider en tu app y cómo especifica los archivos que quieres ofrecer a otras apps.

Nota: La clase FileProvider forma parte del Biblioteca principal de AndroidX. Información sobre cómo incluir esta biblioteca en tu aplicación, consulta Cómo declarar dependencias.

Cómo especificar el FileProvider

Definir un FileProvider para tu app requiere una entrada en tu manifiesto. Esta entrada especifica la autoridad que se usará para generar URI de contenido, así como el nombre de un archivo en formato XML que especifique los directorios que puede compartir tu app.

En el siguiente fragmento, se muestra cómo agregar a tu manifiesto <provider> que especifica la clase FileProvider, la autoridad y el Nombre de archivo 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>

En este ejemplo, el atributo android:authorities especifica la autoridad del URI. que deseas usar para los URI de contenido generados por la FileProvider En el ejemplo, la autoridad es com.example.myapp.fileprovider. Para tu propio específica de la app, especifica una autoridad que incluya Valor android:package con la cadena "fileprovider" agregado a ella. Para obtener más información sobre el valor de autoridad, consulta el tema URI de contenido y la documentación de las atributo android:authorities.

El elemento secundario <meta-data> de <provider> apunta a un archivo XML que especifica los directorios que deseas. compartir. El atributo android:resource es la ruta de acceso y el nombre del archivo, sin La extensión .xml.El contenido de este archivo se describe en la siguiente sección.

Cómo especificar directorios para compartir

Una vez que hayas agregado el FileProvider al manifiesto de tu app, haz lo siguiente: debes especificar los directorios que contienen los archivos que deseas compartir. Para especificar de Terraform, comienza por crear el archivo filepaths.xml en el archivo res/xml/ subdirectorio de tu proyecto. En este archivo, especifica los directorios agregando un elemento XML para cada directorio. El siguiente fragmento muestra un ejemplo del contenido de res/xml/filepaths.xml El fragmento también muestra cómo compartir un subdirectorio del directorio files/ en tu área de almacenamiento interno:

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

En este ejemplo, la etiqueta <files-path> comparte directorios dentro del Directorio files/ del almacenamiento interno de tu app El atributo path comparte el subdirectorio images/ de files/. El name el atributo le indica a FileProvider que agregue el segmento de ruta de acceso myimages a los URIs de contenido de los archivos del subdirectorio files/images/.

El elemento <paths> puede tener varios elementos secundarios, cada uno de los cuales especifica un valor diferente para compartir. Además del elemento <files-path>, puedes usar el elemento <external-path> para compartir directorios en el almacenamiento externo el elemento <cache-path> para compartir directorios en tu caché interna . Para obtener más información sobre los elementos secundarios que especifican directorios compartidos, consulta la Es la documentación de referencia de FileProvider.

Nota: El archivo en formato XML es la única manera de especificar los directorios que deseas. compartir; no puedes agregar un directorio de manera programática.

Ahora tienes una especificación completa de FileProvider que genera URI de contenido para archivos en el directorio files/ del directorio almacenamiento interno o para archivos en subdirectorios de files/. Cuando tu app genera un URI de contenido para un archivo, contiene la autoridad especificada en el Elemento <provider> (com.example.myapp.fileprovider), la ruta de acceso myimages/ y el nombre del archivo.

Por ejemplo, si defines un FileProvider de acuerdo con el fragmentos en esta lección, y solicitarás un URI de contenido para el archivo default_image.jpg, FileProvider muestra el siguiente URI:

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

Para obtener información adicional relacionada, consulta: