在Webview中打开.pdf链接

6

我有一个带有webview的简单应用程序。每次页面上有PDF链接时,单击后什么也不发生。

我目前在处理PDF链接方面遇到了困难,无论如何都无法打开它们。我尝试了一些解决方案,但它们似乎已经过时了。

以下是我的代码:

package com.example.bla;

import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;



import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

public class MainActivity extends AppCompatActivity {

    private WebView webView = null;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        webView=findViewById(R.id.webviewid);
        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
        webSettings.setDomStorageEnabled(true);
        webSettings.setPluginState(WebSettings.PluginState.ON);
        webSettings.setAllowFileAccess(true);
        webSettings.setLoadWithOverviewMode(true);
        webSettings.setUseWideViewPort(true);
        webSettings.setAllowUniversalAccessFromFileURLs(true);

        webView.setWebViewClient(new WebViewClient());
        webView.loadUrl("https://blabla.com");

    }


    public void onBackPressed() {
        if (webView.canGoBack()) {
            webView.goBack();
        } else {
            super.onBackPressed();
        }
    }

    }

你能帮我想办法吗?

2个回答

8
当您点击一个 .PDF 的链接时,Webview 会尝试下载该文件。实际上您想要做的是在外部浏览器中打开该文件。这将显示 PDF,并且如果您希望下载它,还可以给您提供选择。为此,首先为您的 Webview 设置一个下载监听器。
    //for download PDF files
    webView.setDownloadListener(new MyDownLoadListener());

然后,在下载监听器中,将PDF链接发送到外部浏览器会话:
public class MyDownLoadListener implements DownloadListener {
    @Override
    public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {

    if (url != null) {
        Intent i = new Intent(Intent.ACTION_VIEW);
        i.setData(Uri.parse(url));
        startActivity(i);
    }

}

1
谢谢你的回答。我尝试了你的方法,但它一直给我一个错误。你能否编辑上面的代码,以便我可以理解我实现错了什么?非常感谢! - benz

0
尝试通过Google文档服务打开它:
WebView webView = (WebView) context.findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.loadUrl("http://docs.google.com/gview? 
embedded=true&url=yourUrl");

阅读更多


谢谢您的方法。问题在于这是一个普通网站,其中有一些PDF链接。所以这不起作用,它会打开网站源代码。单个PDF可以,但我需要在用户单击PDF链接时才使用它。 - benz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接