在Fragments中实现webView的下载监听器

时间:2018-03-20 20:16:58

标签: java android android-studio android-fragments android-fragmentactivity

我使用下面的代码用webView填充我的片段。每当用户点击webView中的任何下载链接时,我都想从外部浏览器下载任何文件。

我知道Mainactivity,Code Code Fine。



 webView.setDownloadListener(new DownloadListener()
                {
                    public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength)
                    {
                        //download file using web browser
                        Intent i = new Intent(Intent.ACTION_VIEW);
                        i.setData(Uri.parse(url));
                        Toast.makeText(getApplicationContext(), "Downloading File", //To notify the Client that the file is being downloaded
                                Toast.LENGTH_LONG).show();
                        startActivity(i);

                    }
                });




但是我想为Fragments实现,我怎样才能实现这一目标。

我的片段代码是



package com.nepalpolice.cdp;



import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;
import android.view.LayoutInflater;

import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ProgressBar;


/**
 * Created by Sagar on 2017/09/23. yo chai menupage ko Fragments ko lagi
 */

public class webb extends Fragment {

    WebView myWebView;
    private LinearLayout container;
    private Button nextButton, closeButton;
    private EditText findBox;
    ProgressBar pbar;

    public webb() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View rootView = inflater.inflate(R.layout.fragment_webb, container,  false);



        String url1 = getArguments().getString("url1");


        myWebView=(WebView)rootView.findViewById(R.id.webview);
        pbar = (ProgressBar)rootView.findViewById(R.id.progressBar1);
        pbar.setVisibility(View.VISIBLE);

        myWebView.getSettings().setBuiltInZoomControls(true);

        myWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        myWebView.getSettings().setLoadsImagesAutomatically(true);
        myWebView.getSettings().setJavaScriptEnabled(true);

        myWebView.getSettings().setBuiltInZoomControls(true);

        myWebView.setInitialScale(1);
        myWebView.getSettings().setLoadWithOverviewMode(true);
        myWebView.getSettings().setUseWideViewPort(true);

        WebSettings webSettings = myWebView.getSettings();


        myWebView.setWebViewClient(new MyWebViewClient());
        myWebView.loadUrl(url1);

        return rootView;


    }

    public static String changedHeaderHtml(String htmlText) {

        String head = "<head><meta name=\"viewport\" content=\"width=device-width, user-scalable=yes\" /></head>";

        String closedTag = "</body></html>";
        String changeFontHtml = head + htmlText + closedTag;
        return changeFontHtml;

    }

    private class MyWebViewClient extends WebViewClient {

        @Override
        public void onPageFinished(WebView view, String url) {
            //remove your progressdialog here
            super.onPageFinished(view, url);
            pbar.setVisibility(View.GONE);

        }

    }

}
&#13;
&#13;
&#13;

提前致谢。

2 个答案:

答案 0 :(得分:0)

您可以通过覆盖WebViewClient中的 shouldOverrideUrlLoading 方法获取在网页视图中点击的网址

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 

        // download your stuff here

        return false;
    }

请务必阅读documentation并覆盖正确的 shouldOverrideUrlLoading 方法,具体取决于您针对应用定位的SDK Api数量!

欢呼声

答案 1 :(得分:0)

您可以使用下载侦听器,

            mWebView.setDownloadListener(new DownloadListener() {
        @Override
        public void onDownloadStart(String url, String userAgent, String contentDescription,
                                    String mimetype, long contentLength) {//code here}