为什么我的WebView下载2个文件?

时间:2015-11-26 02:46:53

标签: android android-browser android-download-manager

我有webview。我设置了一个下载管理器。但是当我用.apk打开url时,它会自动下载apk 2次并始终用对话框打开完整的动作。

我的WebView代码:

mWebView.setWebViewClient(new WebViewClient() {

            @Override
            public void onReceivedError(WebView view, int errorCode,
                                        String description, String failingUrl) {
                Toast.makeText(MainActivity.this, 
                               "Bağlantı Hatası", Toast.LENGTH_LONG).show();
            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                boolean shouldOverride = false;
                mWebView.setDownloadListener(new DownloadListener() {
                        public void onDownloadStart(String url, String userAgent,
                                                    String contentDisposition, String mimetype,
                                                    long contentLength) {
                            Intent i = new Intent(Intent.ACTION_VIEW);
                            i.setData(Uri.parse(url));
                            startActivity(i);
                        }
                    });
                if (url.endsWith(".apk")) {
                    shouldOverride = true;
                    Uri source = Uri.parse(url);

                    DownloadManager.Request request = new DownloadManager.Request(source);
                    File destinationFile = new File (destinationDir, source.getLastPathSegment());

                    File to = new File(destinationDir, "BL" + ".apk");
                    request.setDestinationUri(Uri.fromFile(destinationFile));
                    manager.enqueue(request);
                    destinationFile.renameTo(to);
                }
                view.getSettings().setJavaScriptEnabled(true);
                view.loadUrl(url);
                return true;
            }

        });




    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.loadUrl(sbllink);
    if (!destinationDir.exists()) {
        destinationDir.mkdir();
    }

2 个答案:

答案 0 :(得分:0)

您正在使用shouldOverrideUrlLoading方法调用loadUrl

  view.getSettings().setJavaScriptEnabled(true);
  view.loadUrl(url); 

你的shouldOverrideUrlLoading方法应该只返回true或false,具体取决于你的逻辑,不应该做任何其他事情,比如更改设置等

答案 1 :(得分:0)

可能是两次调用重写方法的问题,这通常是由于方向更改

如果你想要的位置上没有文件,你可以添加检查,然后只下载它,否则不要下载apk。