我有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();
}
答案 0 :(得分:0)
您正在使用shouldOverrideUrlLoading方法调用loadUrl
view.getSettings().setJavaScriptEnabled(true);
view.loadUrl(url);
你的shouldOverrideUrlLoading方法应该只返回true或false,具体取决于你的逻辑,不应该做任何其他事情,比如更改设置等
答案 1 :(得分:0)
可能是两次调用重写方法的问题,这通常是由于方向更改但,
如果你想要的位置上没有文件,你可以添加检查,然后只下载它,否则不要下载apk。