如何将 bytearray 转换为 pdf 并以​​ ACTION_VIEW 意图显示

How to convert bytearray to pdf and show it with ACTION_VIEW intent

我正在接收经过编码的 pdf base64 String。我想以 ACTION_VIEW 意图显示 PDF。我该怎么做?

目前我只有这个

val byteArray = Base64.decode(base64String, Base64.DEFAULT)
val file = FileUtils.createFile(requireContext(), "application/pdf")

val fos = FileOutputStream(file)
fos.write(byteArray)
fos.close()

val uri = FileProvider.getUriForFile(requireContext(), requireActivity().getString(R.string.file_provider), file)

val intent = Intent(Intent.ACTION_VIEW)
intent.setDataAndType(uri, "application/pdf")
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY)
startActivity(intent)

createFile 函数看起来像

fun createFile(context: Context, mimeType: String): File {
    val timeStamp = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date())
    val fileName = "TMP_" + timeStamp + "_"
    val suffix = "." + MimeTypeMap.getSingleton().getExtensionFromMimeType(mimeType) //.pdf
    return context.getExternalFilesDir("Documents")?.let {
        if (!it.exists()) {
            it.mkdir()
        }
        File.createTempFile(fileName, suffix, it)
    } ?: File.createTempFile(fileName, suffix, Environment.getExternalStorageDirectory())
}

Intent 正常启动,但当我尝试使用 pdf 查看器打开它时,它说文件已损坏。

我简单地改变了这个

intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY)

intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)

现在工作正常!