调用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:
- 先在应用启动阶段检查系统是否安装了可用的TTS引擎(如谷歌文字转语音、百度语音等)
- 等待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
相关产品推荐
相关产品推荐

