Совместное использование DocumentFile с помощью FileProvider - PullRequest
1 голос
/ 20 января 2020

если я хочу поделиться sourceFile типа File, я использую FileProvider с полномочиями. Фрагмент:

val intent = Intent(Intent.ACTION_SEND)
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
intent.putExtra(
    Intent.EXTRA_STREAM, FileProvider.getUriForFile(
        context,
        context.applicationContext.packageName + ".provider",
        sourceFile
    )
)
intent.type = "audio/ogg"
startActivity(context, Intent.createChooser(intent, context.getString(R.string.share_audio)), null)

Как правильно сделать это, если sourceFile является DocumentFile вместо File?

Я не смог бы найти какой-либо замены для getUriForFile, который работает с DocumentFile. На данный момент я просто копирую файл в кеш, а затем делюсь им оттуда, но я думаю, что должен быть лучший способ.

Ответы [ 2 ]

1 голос
/ 20 января 2020

Как правильно сделать это, если sourceFile является DocumentFile вместо File?

Вам не нужно FileProvider в этом сценарии. Вместо этого позвоните getUri() на DocumentFile и используйте Uri в своем Intent.

0 голосов
/ 20 января 2020
Uri fileUri = null;
                                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                                    try {
                                        fileUri = FileProvider.getUriForFile(activity, BuildConfig.APPLICATION_ID + ".myfileprovider", file);
                                    } catch (Exception e) {
                                        e.printStackTrace();
                                    }
                                } else {
                                    fileUri = Uri.parse("file://" + file.getAbsolutePath());
                                }

                                Intent share = new Intent(Intent.ACTION_SEND);
                                share.setType("audio/ogg");
                                share.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                                startActivityForResult(Intent.createChooser(share, "Share"), 201);
...