我在尝试从基于WebView的应用程序上的服务器下载文件时遇到问题。 这段代码实际上适用于Galaxy S4 ,其中包含android 4.4.2 ,但在使用相同版本的Android时无法在Nexus 5上运行。
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.toLowerCase().contains("video") || url.toLowerCase().contains("mp4")) {
String cookie = CookieManager.getInstance().getCookie(url);
DownloadManager mdDownloadManager = (DownloadManager) MainActivity.this
.getSystemService(Context.DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
request.addRequestHeader("Cookie", cookie);
request.setDescription(getString(R.string.download_video));
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setTitle(getString(R.string.app_name));
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).mkdirs();
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, getFileName(url));
request.setMimeType("video/mp4");
mdDownloadManager.enqueue(request);
}
webViewPreviousState = PAGE_REDIRECTED;
view.loadUrl(appendAndroidClientIdentification(url));
return true;
}
在尝试通过Nexus 5设备下载文件时,检查日志时发现了这一点:
I/DownloadManager﹕ Download 1755 starting
W/DownloadManager﹕ Aborting request for download 1755: can't know size of download, giving up
I/DownloadManager﹕ Download 1755 finished with status CANNOT_RESUME
问题出在服务器端。我正在使用rails的send_data方法。 此方法不会在标头中发送ContentLength,这是某些设备出错的原因。
要解决此问题,只需添加到 application.rb 文件:
config.middleware.use Rack::ContentLength
答案 0 :(得分:2)
问题出在服务器端。我正在使用rails中的send_data
方法。
此方法不会在标头中发送ContentLength
,这是某些设备出错的原因。
要解决此问题,只需添加到application.rb
:
config.middleware.use Rack::ContentLength