Android 如何在DownloadManager中启用HTTP响应缓存?

Android 如何在DownloadManager中启用HTTP响应缓存?,android,Android,我希望重复请求从本地缓存提供URL,而不是从服务器重新下载。我正在使用,希望它能成为HttpURLConnection()的方便替代品,但默认情况下它没有响应缓存。以下是我的测试代码: final Context context = getContext(); final DownloadManager manager = Android.ensureSystemService( DownloadManager.class, context ); final DownloadManager.

我希望重复请求从本地缓存提供URL,而不是从服务器重新下载。我正在使用,希望它能成为
HttpURLConnection
()的方便替代品,但默认情况下它没有响应缓存。以下是我的测试代码:

final Context context = getContext();
final DownloadManager manager =
  Android.ensureSystemService( DownloadManager.class, context );
final DownloadManager.Request req =
  new DownloadManager.Request( Uri.parse( BIG_FILE_URL ));
req.setNotificationVisibility( VISIBILITY_HIDDEN ); // hiding from user
context.registerReceiver( new BroadcastReceiver()
{
    public void onReceive( final Context context, final Intent intent )
    {
        context.unregisterReceiver( this ); // one shot for this test
        final long id = intent.getLongExtra( EXTRA_DOWNLOAD_ID, -1L );
        System.err.println( " --- downloaded id=" + id );
        System.err.println( " --- uri=" +
          manager.getUriForDownloadedFile(id) );
    }
}, new IntentFilter( ACTION_DOWNLOAD_COMPLETE ));
manager.enqueue( req );
运行上述测试两次后,我在远程服务器上看到两个
GET
请求(每个请求都有
200
响应),并在本地Android日志中看到以下内容:

20:14:27.574 D/DownloadManager( 1591): [1] Starting
20:14:28.256 D/DownloadManager( 1591): [1] Finished with status SUCCESS
20:14:28.263 W/System.err( 2203):  --- downloaded id=1
20:14:28.269 W/System.err( 2203):  --- uri=content://downloads/my_downloads/1
20:15:13.904 D/DownloadManager( 1591): [2] Starting
20:15:14.517 D/DownloadManager( 1591): [2] Finished with status SUCCESS
20:15:14.537 W/System.err( 2203):  --- downloaded id=2
20:15:14.541 W/System.err( 2203):  --- uri=content://downloads/my_downloads/2
所以它下载了两次
BIG_文件
,并将其存储在两个文件中。相反,我需要响应缓存。下载管理器能否进行响应缓存


附:看起来像是“不”。因此,我更正了将我带到这里的建议()


PPS。当然,我测试了一个标准。它对
下载管理器
没有影响,不过默认情况下,它会为每个
HttpURLConnection

下载到临时目标的服务启用缓存。没有缓存请求的内置功能,但是您可以使用方法查询之前请求的下载列表

缓存涉及HTTP协议。查询工具不会给我这种协调。我无法在框外添加适当的缓存。(我应该知道,即使是像DownloadManager这样的大盒子,我也不会看。它总是浪费时间。)