You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 16:07:04