From 1b198e09410814e0c1cb9d568384920739741728 Mon Sep 17 00:00:00 2001 From: dongliang Date: Thu, 7 May 2026 11:46:53 +0930 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=AF=AD=E9=9F=B3=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?=E6=94=B9=E7=94=A8=20HTTP=20=E7=BB=95=E8=BF=87=20OSS=20TLS=20?= =?UTF-8?q?=E5=85=BC=E5=AE=B9=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 阿里云 OSS 的 HTTPS 在 Android 8.1 conscrypt 下 TLS 握手被 reset OSS 同时支持 HTTP,降级为 HTTP 下载即可 使用独立的无拦截器 OkHttpClient 避免签名干扰 Co-Authored-By: Claude Opus 4.6 (1M context) --- .../com/xiaoqu/watch/ui/task/TaskListFragment.kt | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/xiaoqu/watch/ui/task/TaskListFragment.kt b/app/src/main/java/com/xiaoqu/watch/ui/task/TaskListFragment.kt index 9f4f007..44ba819 100644 --- a/app/src/main/java/com/xiaoqu/watch/ui/task/TaskListFragment.kt +++ b/app/src/main/java/com/xiaoqu/watch/ui/task/TaskListFragment.kt @@ -44,7 +44,9 @@ class TaskListFragment : BaseFragment() { @Inject lateinit var taskApi: TaskApi @Inject lateinit var nfcTaskManager: NfcTaskManager - @Inject lateinit var okHttpClient: OkHttpClient + + /** 下载用的 OkHttp(不带签名拦截器,走 HTTP 避免 TLS 问题) */ + private val downloadClient by lazy { OkHttpClient.Builder().build() } /** 任务 ID 列表(queryTaskIds 返回) */ private var taskList: List = emptyList() @@ -460,11 +462,13 @@ class TaskListFragment : BaseFragment() { } } - /** 用 OkHttp 下载音频文件到缓存目录(复用应用 SSL 配置) */ + /** 用 OkHttp 下载音频文件到缓存目录 */ private fun downloadToCache(url: String): java.io.File? { return try { - val request = Request.Builder().url(url).build() - val response = okHttpClient.newCall(request).execute() + // OSS 的 HTTPS 在 Android 8.1 设备 TLS 握手失败,降级为 HTTP + val httpUrl = url.replace("https://", "http://") + val request = Request.Builder().url(httpUrl).build() + val response = downloadClient.newCall(request).execute() if (!response.isSuccessful) { Timber.w("语音下载HTTP错误: ${response.code}") return null