Веб-просмотр не будет загружать PDF-файлы по ссылке нажмите - PullRequest
7 голосов
/ 04 февраля 2012

Я разработал веб-приложение, которое отображает список документов PDF, размещенных на веб-сервере.Это приложение встроено в приложение для веб-просмотра для Android, однако при загрузке приложения на телефон выбор ссылки в формате PDF ничего не дает.Что я делаю неправильно?Спасибо

Вот код Java:

package com.hellowebview;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class HellowebviewActivity extends Activity {
/** Called when the activity is first created. */

private WebView mWebView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mWebView = (WebView) findViewById(R.id.webview);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.loadUrl("http://aipnz.webs.com");
    mWebView.setWebViewClient(new HelloWebViewClient());
    mWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);

}
private class HelloWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView webview, String url)
    {
        webview.loadUrl(url);
        return true;
    }
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
    if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack())
    {
        mWebView.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}
}

Ответы [ 6 ]

16 голосов
/ 04 февраля 2012

Если вы хотите загрузить PDF, вы можете использовать Google Docs для его загрузки.

String googleDocs = "https://docs.google.com/viewer?url=";
String pdf_url = "http://kronox.org/documentacion/Hello.Android.new.pdf";  

webView.loadUrl(googleDocs + pdf_url);

ПРИМЕЧАНИЕ. Вам необходим android.permission.INTERNET в файле манифеста

12 голосов
/ 23 мая 2013

Просто создайте Intent в вашем методе shouldOverrideUrlLoading:

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if ( urlIsPDF(url)){
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setDataAndType(Uri.parse(url), "application/pdf");
            try{
                view.getContext().startActivity(intent);
            } catch (ActivityNotFoundException e) {
                //user does not have a pdf viewer installed
            }
        } else {
            webview.loadUrl(url);
        }
        return true;
    }

И затем каждый раз, когда пользователь нажимает ссылку PDF на странице вашего веб-просмотра, файл открывается во внешнем приложении PDF.

5 голосов
/ 29 ноября 2017
webView.setWebViewClient(new WebViewClient() {
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url.endsWith(".pdf")) {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setDataAndType(Uri.parse(url), "application/pdf");
            try {
                view.getContext().startActivity(intent);
            } catch (ActivityNotFoundException e) {
                //user does not have a pdf viewer installed
            }
        } else {
            webView.loadUrl(url);
        }

        return true;
    }
}
5 голосов
/ 04 августа 2017

Это решение, которое я использую:

@Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url.endsWith(".pdf")){
            String pdfUrl = googleDocs + url;
            view.loadUrl(pdfUrl);
        } else {
            view.loadUrl(url);
        }
        return true;
    }

с

private final String googleDocs = "https://docs.google.com/viewer?url=";
4 голосов
/ 23 августа 2017

Вы должны переопределить shouldOverrideUrlLoading метод в WebClient.Я использую этот подход с комбинацией намерения и Google Docs в качестве резервной копии:

/* You might want to move this string definition somewhere else */
final String googleDocs = "https://docs.google.com/viewer?url=";

WebView webView = new WebView(getContext());
//webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView webView, String url) {
        if (url.endsWith(".pdf")) {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setDataAndType(Uri.parse(url), "application/pdf");
            /* Check if there is any application capable to process PDF file. */
            if (intent.resolveActivity(getPackageManager()) != null) {
                startActivity(intent);
            } else {
                /* If not, show PDF in Google Docs instead. */
                view.loadUrl(googleDocs + url);
            }
        } else {
            webView.loadUrl(url);
        }
        return true;
    }
});

Возможно, вам придется изменить передачу контекста и доступ к методу startActivity, но в остальном он должен работать как есть.

Также обратите внимание, что начиная с API 24, существует 2 shouldOverrideUrlLoading методов, которые вы можете переопределить.Как указано здесь из @CommonsWare, можно переопределить устаревший метод.

0 голосов
/ 04 февраля 2012

используйте loadurl другие перегруженные методы ... и напишите разрешение на доступ в интернет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...