Поиск…


Совместное использование файла

В этом примере вы узнаете, как делиться файлом с другими приложениями. Мы будем использовать pdf-файл в этом примере, хотя код работает и с любым другим форматом.

Дорожная карта:

Укажите каталоги, в которых размещаются файлы, которые вы хотите разделить.

Для обмена файлами мы будем использовать FileProvider, класс, обеспечивающий безопасное совместное использование файлов между приложениями. FileProvider может делиться только файлами в предопределенных каталогах, поэтому давайте их определим.

  1. Создайте новый XML-файл, который будет содержать пути, например res / xml / filepaths.xml

  2. Добавить пути

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

Определите FileProvider и свяжите его с файловыми путями

Это делается в манифесте:
<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>

Создайте URI для файла

Чтобы поделиться файлом, мы должны предоставить идентификатор файла. Это делается с помощью URI (Uniform Resource Identifier).
// 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);

Как вы можете видеть в коде, мы сначала создаем новый класс File, представляющий файл. Чтобы получить URI, мы попросим FileProvider получить нас. Второй аргумент важен: он передает полномочия FileProvider. Он должен быть равен авторитету FileProvider, определенному в манифесте.

Поделитесь файлом с другими приложениями

Мы используем ShareCompat для совместного использования файла с другими приложениями:
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);

Выбор - это меню, из которого пользователь может выбрать, с каким приложением он хочет поделиться файлом. Флаг Intent.FLAG_GRANT_READ_URI_PERMISSION необходим для предоставления разрешения на временное чтение для URI.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow