Android API31+解决DownloadManager ERROR_TOO_MANY_REDIRECTS问题
关于DownloadManager重定向次数的问题解答
1. DownloadManager默认重定向次数
Android系统的DownloadManager默认允许的HTTP重定向次数为5次,这个限制是系统底层实现的硬约束,未通过公开API对外暴露。当重定向次数超过该阈值时,就会触发ERROR_TOO_MANY_REDIRECTS(1005)错误。
2. 能否增加最大重定向次数?
不能。DownloadManager没有提供任何公开方法或参数来修改最大重定向次数,这个限制是固定的,无法通过配置调整。
3. 解决过多重定向下载失败的方案
如果需要支持10、20甚至30次的重定向场景,只能放弃DownloadManager,改用自定义下载实现,比如使用OkHttp框架,它允许灵活配置重定向策略。
示例代码(基于OkHttp实现自定义下载)
import okhttp3.OkHttpClient import okhttp3.Request import java.io.File import java.io.FileOutputStream import java.io.IOException fun downloadFileWithCustomRedirects(url: String, path: String, maxRedirects: Int = 30): Boolean { val client = OkHttpClient.Builder() .followRedirects(true) .followSslRedirects(true) .retryOnConnectionFailure(true) .callTimeout(30, java.util.concurrent.TimeUnit.SECONDS) // 自定义重定向次数限制 .addInterceptor { chain -> var request = chain.request() var response = chain.proceed(request) var redirectCount = 0 while (response.isRedirect && redirectCount < maxRedirects) { redirectCount++ val newUrl = response.header("Location") ?: break request = request.newBuilder().url(newUrl).build() response.close() response = chain.proceed(request) } if (redirectCount >= maxRedirects) { throw IOException("Too many redirects: $redirectCount") } response } .build() val request = Request.Builder().url(url).build() return try { client.newCall(request).execute().use { response -> if (!response.isSuccessful) throw IOException("Unexpected code $response") val file = File(path) file.parentFile?.mkdirs() FileOutputStream(file).use { outputStream -> response.body?.byteStream()?.copyTo(outputStream) } true } } catch (e: IOException) { e.printStackTrace() false } finally { client.dispatcher.executorService.shutdown() client.connectionPool.evictAll() } }
注意事项
- 自定义下载需要自行处理网络权限(
INTERNET)、存储权限(根据Android版本适配WRITE_EXTERNAL_STORAGE或使用Scoped Storage)。 - 如果需要后台下载,可以结合
WorkManager或ForegroundService实现,避免系统杀死进程。 - 下载完成后需调用媒体扫描(如
MediaScannerConnection)让系统识别下载的文件。
内容的提问来源于stack exchange,提问作者Puneet Sharma
相关产品推荐
相关产品推荐

