如何将 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)
现在工作正常!
我正在接收经过编码的 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)
现在工作正常!