【问题标题】:Implement Download listener for webView inside Fragments在 Fragments 中为 webView 实现下载监听器
【发布时间】:2018-03-20 20:16:58
【问题描述】:

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

我知道 Mainactivity,Below Code 可以正常工作。

 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);

        }

    }

}

提前致谢。

【问题讨论】:

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


    【解决方案1】:

    您可以通过覆盖 WebViewClient 中的 shouldOverrideUrlLoading 方法来获取在 webview 中单击的 url

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) { 
    
            // download your stuff here
    
            return false;
        }
    

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

    干杯

    【讨论】:

    • @Pitor Z,当我剪切并粘贴 myWebView.loadUrl(url1); 时,它会抛出错误,但如果我替换 url 而不是 url1 ..........,那么只有它不起作用。但我想加载从另一个片段传递的 url1 作为字符串...我该如何加载字符串呢??
    【解决方案2】:

    您可以使用下载监听器,

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-08
      • 2012-03-24
      • 2011-08-21
      相关资源
      最近更新 更多