在 android 中使用意图共享 PDF 在 Android 12 中不起作用

Share PDF using intent in android not working in Android 12

我无法仅在 android 12 中使用 intent 共享 PDF,但它在低于版本的情况下工作正常。正在下载文件并从下载文件夹中获取文件 Uri。

下载位置:

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)

错误信息:分享失败,请重试。

private void sharePDF() {
    Uri fileUri = FileProvider.getUriForFile(getApplicationContext(), getPackageName() + ".provider", pdfFile);

    Intent share = new Intent();
    share.setAction(Intent.ACTION_SEND);
    share.putExtra(Intent.EXTRA_STREAM, fileUri);
    share.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    share.setType("application/pdf");
    startActivity(Intent.createChooser(share, "Share Catalogue"));
}

我在下面提到的 Android 12 (API-31) 中遇到了问题,

错误日志:java.lang.SecurityException:权限被拒绝:读取 androidx.core.content.FileProvider uri 内容://com.test.catalogue.provider/external/Download/test.pdf 来自 pid=30787,uid=1000 需要提供者被导出,或 grantUriPermission()

经过多次研发,我添加了几行并通过 intent 解决了共享 pdf 文件的问题。

share.setClipData(ClipData.newRawUri("", fileUri));
    share.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    share.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

share.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

share.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

但是这里还是发现了一个问题,过一段时间我们会得到“共享已归档再试一次”的提示。