【问题标题】:Why My WebView Downloading 2 Files?为什么我的 WebView 下载 2 个文件?
【发布时间】:2015-11-26 02:46:53
【问题描述】:

我有网络视图。我将其设置为下载管理器。但是当我用 .apk 打开 url 时,它会自动下载 2 次 apk,并且总是用对话框打开完整的操作。

我的 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();
    }

【问题讨论】:

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


    【解决方案1】:

    您在 shouldOverrideUrlLoading 方法中调用 loadUrl

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

    您的 shouldOverrideUrlLoading 方法应该根据您的逻辑返回 true 或 false,并且不应执行任何其他操作,例如更改设置等

    【讨论】:

    • 我应该在哪里调用 loadUrl?应该做更多的编辑吗?
    • 你已经在 mWebView.loadUrl(sbllink) 中调用 loadUrl;
    • 什么?我的问题是,为什么要下载 2 个文件
    • 因为你在 view.loadUrl(url) 和 mWebView.loadUrl(sbllink) 中调用了 loadUrl 两次;
    【解决方案2】:

    可能是调用被覆盖的方法两次的问题,这通常是由于方向变化而发生的但是

    如果文件在您想要的位置不存在,您可以添加检查,然后只下载它,否则不要下载 apk。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-10
      • 2021-04-30
      • 2015-08-15
      • 1970-01-01
      相关资源
      最近更新 更多