Android 9/10设备调用readAllBytes()读取PDF崩溃原因咨询
崩溃原因分析
根本原因
InputStream.readAllBytes()是Java 9新增的API,Android 9(API 28)和Android 10(API 29)的系统核心库并未包含这个方法。- Android 11(API 30)及后续版本才将该方法整合进系统的
InputStream实现,因此高版本设备可以正常运行。
代码触发点
你提供的代码中直接调用了openInputStream(it)?.readAllBytes(),在Android 9/10设备上,系统无法找到该方法的实现,从而抛出java.lang.NoSuchMethodError导致崩溃。
兼容低版本的替代实现(可选)
如果需要兼容Android 9/10,需要手动实现读取输入流的逻辑,替代readAllBytes():
fun getPdfImageFromUri(uri: Uri?, applicationContext: Context): String? { var outputString: String? = null uri?.let { val inputStream = applicationContext.contentResolver.openInputStream(it) ?: return null val buffer = ByteArray(4096) val output = ByteArrayOutputStream() var bytesRead: Int while (inputStream.read(buffer).also { bytesRead = it } != -1) { output.write(buffer, 0, bytesRead) } outputString = encodeToString(output.toByteArray()) inputStream.close() } return outputString }
内容的提问来源于stack exchange,提问作者Coldnight
相关产品推荐
相关产品推荐

