下载管理器在WebView中无法在android中下载.pdf和.docx文件
我正在webview上加载此文件, 我的代码可以很好地加载url,但每当我单击url中的文件时,它都不会下载,我认为问题在于文件扩展名 我还需要将文件下载到SD卡中的特定文件夹中 目前我正在使用下面的代码,我不明白我的代码中可能有什么错误 我的主要活动是下载管理器在WebView中无法在android中下载.pdf和.docx文件,android,webview,sdk,download-manager,Android,Webview,Sdk,Download Manager,我正在webview上加载此文件, 我的代码可以很好地加载url,但每当我单击url中的文件时,它都不会下载,我认为问题在于文件扩展名 我还需要将文件下载到SD卡中的特定文件夹中 目前我正在使用下面的代码,我不明白我的代码中可能有什么错误 我的主要活动是 public class GosActs extends Activity{ WebView web; @Override protected void onCreate(Bundle savedInstanceState) { s
public class GosActs extends Activity{
WebView web;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gos_acts);
web = (WebView)findViewById(R.id.wGAweb);
web.setWebViewClient(new WebViewClient(){
public void onLoadResource(WebView view, String url) {
//load.setVisibility(View.VISIBLE);
}
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(url.endsWith(".pdf")){
Uri source = Uri.parse(url);
DownloadManager.Request request = new DownloadManager.Request(source);
request.setDescription("requested GO downloading");
request.setTitle("go.pdf");
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION);
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "Go.pdf");
DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
manager.enqueue(request);
} else if(url.endsWith(".docx")){
Uri source = Uri.parse(url);
DownloadManager.Request request = new DownloadManager.Request(source);
request.setDescription("requested GO downloading");
request.setTitle("go.pdf");
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION);
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "Go.pdf");
DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
manager.enqueue(request);
}
else
view.loadUrl(url);
return true;
}
public void onPageFinished(WebView view, String url) {
//load.setVisibility(View.GONE);
}
});
web.getSettings().setJavaScriptEnabled(true);
web.getSettings().setBuiltInZoomControls(true);
web.getSettings().setDisplayZoomControls(false);
web.getSettings().setLoadWithOverviewMode(true);
web.getSettings().setUseWideViewPort(true);
web.loadUrl("http://goir.ap.gov.in");
}
我的gos_acts.xml是
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#288A0E"
android:orientation="vertical" >
<WebView
android:id="@+id/wGAweb"
android:layout_margin="5dip"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/background_card" />
</LinearLayout>
我还在minifest.xml中添加了所需的权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER"/>
<uses-permission android:name="android.permission.INTERNET"/>
当您在调试器中单步执行代码或添加日志语句时,您的代码是否会像预期的那样进入shouldOverrideUrlLoading()
和分支?如果是,并且您确定正在调用您的DownloadManager
代码,日志中是否有来自Downloads
应用程序的消息?@commonware我刚刚错过了它,我的代码没有进入shouldOverrideUrlLoading()方法我建议您将@Override
注释添加到WebViewClient
方法中,确保他们的签名正确无误。另外,请记住,shouldOverrideUrlLoading()
几乎只用于简单的链接和服务器重定向。其他东西,如表单或基于JavaScript的重定向,将不会触发shouldOverrideUrlLoading()
@commonware非常感谢,它在添加'@Override'注释后可以很好地用于带有.pdf扩展名的链接,但仍然不起作用,我认为它们不是链接,但可以在crome浏览器上使用。