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

调用FolioReader打开raw目录电子书时App崩溃该如何修复

FolioReader TTS空指针异常修复方案

该异常是FolioReader内置媒体叠加(含TTS语音朗读)模块的已知问题:TTS实例初始化未完成就被调用setOnUtteranceCompletedListener方法,导致空对象引用。你可以根据自己的业务需求选择以下修复方案:

方案1:关闭不需要的TTS功能(最快捷)

如果你的应用不需要语音朗读功能,直接在初始化时关闭媒体叠加功能即可,代码如下:

val config = FolioReader.Config()
config.isMediaOverlayEnabled = false
val folioReader = FolioReader.get()
folioReader.setConfig(config, true)
folioReader.openBook(R.raw.book)

方案2:保留TTS功能的修复方法

如果需要使用语音朗读功能,需要提前确认系统TTS服务可用再初始化FolioReader:

  1. 先在应用启动阶段检查系统是否安装了可用的TTS引擎(如谷歌文字转语音、百度语音等)
  2. 等待TTS初始化完成后再调用FolioReader的初始化逻辑

示例代码:

// 先检查TTS服务
val ttsInitCheck = Intent()
ttsInitCheck.action = TextToSpeech.Engine.ACTION_CHECK_TTS_DATA
startActivityForResult(ttsInitCheck, 1001)

// 回调中确认TTS可用后再初始化FolioReader
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (requestCode == 1001) {
        if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
            // TTS可用,初始化FolioReader
            val folioReader = FolioReader.get()
            folioReader.openBook(R.raw.book)
        } else {
            // 提示用户安装TTS引擎
            val installIntent = Intent()
            installIntent.action = TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA
            startActivity(installIntent)
        }
    }
}

方案3:升级FolioReader版本

该异常为v0.5.2及之前版本的已知bug,升级到官方最新正式版即可,新版已经增加了TTS实例空判断防护,不会触发该崩溃。

内容的提问来源于stack exchange,提问作者Mohammad hosein Hosseini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:06:03