anx-reader icon indicating copy to clipboard operation
anx-reader copied to clipboard

[Bug]: tts听书的下一章内容获取依赖于前台运行的界面实例,导致app后台或者手机锁屏时tts听书不会自动跳转到下一章节

Open ptbsare opened this issue 3 months ago • 4 comments

Prerequisites|前提条件

  • [x] I have checked the troubleshooting|我已经查看过故障排除
  • [x] I have searched for similar issues and did not find any|我已经搜索过没有相同的问题

Describe the bug|描述问题

可能原因: 内容获取耦合依赖一个在前台运行的 InAppWebView 组件,而一旦应用进入后台或设备锁屏,WebView 的 JavaScript 执行会受到严格限制或完全暂停。

1、跳转章节依赖 WebView:当 TTS 播放到章节末尾,需要跳转到下一章时,它会调用 ttsNextSection() ([anx-reader/lib/page/book_player/epub_player.dart:287]。这个 Dart 方法同样会执行一个名为 ttsNextSection() 的 JavaScript 函数。这个 JS 函数负责处理复杂的逻辑:在当前 WebView 中加载下一章的 HTML 内容 - 渲染新章节的页面 - 定位到新章节的开头 - 返回第一句文本给 TTS 引擎。 2、当应用进入后台或手机锁屏时,为了节省电量和系统资源,iOS 和 Android 都会暂停 WebView 中 JavaScript 的执行。虽然 audio_service 可以让音频在后台继续播放,但当 TTS 引擎播放完当前章节的最后一句,并尝试通过 ttsNextSection() 回调请求下一章内容时,问题就出现了。此时,由于 WebView 处于“休眠”状态,ttsNextSection() 的 JavaScript 调用无法执行或被无限延迟。因此,Dart 端的 TtsHandler 永远等不到下一章的文本数据。最终结果就是,TTS 播放完当前章节后就停止了,无法自动加载并朗读下一章。

结论: 要想实现后台自动跳转章节,必须重构数据获取逻辑,使其摆脱对前台 WebView 的依赖。把tts内容与界面解除耦合,例如,可以在 Dart 层预先解析 EPUB 文件,将章节内容缓存起来,这样 TTS 服务在后台也能直接从内存或数据库中获取下一章的文本,而无需与“休眠”的 WebView 交互。

To reproduce|重现步骤

  1. 打开听书
  2. 手机锁屏或后台播放
  3. 等待听书到章节结束
  4. tts可能暂停(取决于手机的省电策略,后台策略等,可以适当等时间长的后台测试)
  5. app恢复前台
  6. 恢复播放。

Expected behavior|预期行为

tts在后台能不中断播放下一章

Screenshots|截图

No response

Platform (please complete the following information)|平台(请填写以下信息)

  • Platform: | 平台: Android
  • OS: | 操作系统: [e.g. Android13(MIUI14)] 澎湃os2
  • AnxReader Version: | 安读版本: 1.8.1
  • Device: | 设备: 红米k60

Additional context|其他信息

No response

ptbsare avatar Oct 11 '25 15:10 ptbsare

👋 感谢您提交bug报告!

我注意到您的平台信息可能不够完整。为了更好地帮助您解决问题,请提供以下完整信息:

  • Platform | 平台:(如: Android, iOS, Windows, macOS, Linux)
  • OS | 操作系统:(如: Android 13 (MIUI 14), iOS 17.1, Windows 11)
  • AnxReader Version | 安读版本:(如: 1.6.3+2100,可在应用设置中查看)
  • Device | 设备:(如: Xiaomi 13, iPhone 15, ThinkPad X1)

请编辑您的issue并填写完整的平台信息,这将帮助我们更快地定位和解决问题。


Thank you for submitting this bug report!

I noticed that your platform information might be incomplete. To better help you solve the issue, please provide complete information for:

  • Platform: (e.g., Android, iOS, Windows, macOS, Linux)
  • OS: (e.g., Android 13 (MIUI 14), iOS 17.1, Windows 11)
  • AnxReader Version: (e.g., 1.6.3+2100, check in app settings)
  • Device: (e.g., Xiaomi 13, iPhone 15, ThinkPad X1)

Please edit your issue and fill in the complete platform information to help us locate and resolve the issue faster.

github-actions[bot] avatar Oct 11 '25 15:10 github-actions[bot]

开发大大您好,tts还有一个问题:当前听的分段,在下一页也有内容时,不能自动及时翻页

navy2016 avatar Oct 13 '25 09:10 navy2016

是的,我也怀疑是这个问题。但是具体怎么解决还没有好的方法

Anxcye avatar Oct 13 '25 10:10 Anxcye

我也正想反馈这个BUG:tts听书(系统朗读)不会自动跳转到下一章节

Platform | 平台: Android OS | 操作系统: Android 11 (realmeUI 2.0) AnxReader Version | 安读版本: 1.9.2 Device | 设备: realme X2 Pro

yuanzuwen avatar Nov 04 '25 07:11 yuanzuwen