Buscar..


Compartiendo un archivo

En este ejemplo, aprenderá cómo compartir un archivo con otras aplicaciones. Usaremos un archivo pdf en este ejemplo, aunque el código también funciona con cualquier otro formato.

La hoja de ruta:

Especifique los directorios en los que se ubican los archivos que desea compartir.

Para compartir archivos usaremos un FileProvider, una clase que permite compartir archivos de forma segura entre aplicaciones. Un FileProvider solo puede compartir archivos en directorios predefinidos, así que definamos estos.

  1. Cree un nuevo archivo XML que contendrá las rutas, por ejemplo, res / xml / filepaths.xml

  2. Agrega los caminos

    <paths xmlns:android="http://schemas.android.com/apk/res/android">
        <files-path name="pdf_folder" path="documents/"/>
    </paths>
    

Defina un FileProvider y vincúlelo con las rutas del archivo

Esto se hace en el manifiesto:
<manifest>
    ...
    <application>
        ...
        <provider
            android:name="android.support.v4.context.FileProvider"
            android:authorities="com.mydomain.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/filepaths" />
        </provider>
        ...
    </application>
    ...
</manifest>

Generar el URI para el archivo

Para compartir el archivo debemos proporcionar un identificador para el archivo. Esto se hace mediante el uso de un URI (Identificador uniforme de recursos).
// We assume the file we want to load is in the documents/ subdirectory
// of the internal storage
File documentsPath = new File(Context.getFilesDir(), "documents");
File file = new File(documentsPath, "sample.pdf");
// This can also in one line of course:
// File file = new File(Context.getFilesDir(), "documents/sample.pdf");

Uri uri = FileProvider.getUriForFile(getContext(), "com.mydomain.fileprovider", file);

Como puede ver en el código, primero creamos una nueva clase de archivo que representa el archivo. Para obtener un URI, le pedimos a FileProvider que nos obtenga uno. El segundo argumento es importante: pasa la autorización de un proveedor de archivos. Debe ser igual a la autoridad del FileProvider definido en el manifiesto.

Comparte el archivo con otras aplicaciones

Usamos ShareCompat para compartir el archivo con otras aplicaciones:
Intent intent = ShareCompat.IntentBuilder.from(getContext())
    .setType("application/pdf")
    .setStream(uri)
    .setChooserTitle("Choose bar")
    .createChooserIntent()
    .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

Context.startActivity(intent);

Un selector es un menú desde el cual el usuario puede elegir con qué aplicación quiere compartir el archivo. La bandera Intent.FLAG_GRANT_READ_URI_PERMISSION es necesaria para otorgar un permiso de acceso de lectura temporal al URI.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow