From 02f84e6c04657477244926234af4b6aefb688f4f Mon Sep 17 00:00:00 2001 From: dongliang Date: Fri, 8 May 2026 13:17:39 +0930 Subject: [PATCH] =?UTF-8?q?fix:=20EdgeTTS=20=E7=94=A8=E7=8B=AC=E7=AB=8B=20?= =?UTF-8?q?OkHttpClient=EF=BC=8C=E5=8E=BB=E6=8E=89=E4=B8=9A=E5=8A=A1?= =?UTF-8?q?=E6=8B=A6=E6=88=AA=E5=99=A8=E5=B9=B2=E6=89=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit WebSocket 连接经过了 SignatureInterceptor/UnbindInterceptor 导致连接被重置。 改为独立的 OkHttpClient,不带任何业务拦截器。 Co-Authored-By: Claude Opus 4.6 (1M context) --- .../watch/service/manager/EdgeTtsManager.kt | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/xiaoqu/watch/service/manager/EdgeTtsManager.kt b/app/src/main/java/com/xiaoqu/watch/service/manager/EdgeTtsManager.kt index 3cefa44..aef20e2 100644 --- a/app/src/main/java/com/xiaoqu/watch/service/manager/EdgeTtsManager.kt +++ b/app/src/main/java/com/xiaoqu/watch/service/manager/EdgeTtsManager.kt @@ -22,10 +22,18 @@ import javax.inject.Singleton */ @Singleton class EdgeTtsManager @Inject constructor( - @ApplicationContext private val context: Context, - private val okHttpClient: OkHttpClient + @ApplicationContext private val context: Context ) { + /** + * TTS 专用 OkHttpClient(不带业务拦截器) + * 业务拦截器(SignatureInterceptor、UnbindInterceptor)会干扰 WebSocket 连接 + */ + private val ttsClient = OkHttpClient.Builder() + .connectTimeout(10, java.util.concurrent.TimeUnit.SECONDS) + .readTimeout(30, java.util.concurrent.TimeUnit.SECONDS) + .build() + companion object { private const val TAG = "EdgeTTS" @@ -146,7 +154,7 @@ class EdgeTtsManager @Inject constructor( val audioBuffer = ByteArrayOutputStream() var resumed = false - val ws = okHttpClient.newWebSocket(request, object : WebSocketListener() { + val ws = ttsClient.newWebSocket(request, object : WebSocketListener() { override fun onOpen(webSocket: WebSocket, response: Response) { Timber.d("$TAG: WebSocket 已连接") @@ -182,7 +190,7 @@ class EdgeTtsManager @Inject constructor( } override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) { - Timber.e(t, "$TAG: WebSocket 连接失败") + Timber.e(t, "$TAG: WebSocket 连接失败, response=${response?.code}, url=$url") // 尝试从错误响应中修正时钟偏移 response?.header("Date")?.let { adjustClockSkew(it) } if (!resumed) {