Я хочу загрузить конкретный файл внутри приложения веб-просмотра для Android (хотя они взяты из внешней ссылки, а не из моего URL-адреса приложения веб-просмотра), и все внешние ссылки должны открываться вне приложения веб-просмотра, что означает браузер телефона.
Для этого я использовал приведенный ниже код.
wv.setWebViewClient(new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view, String url) {
boolean value = true;
String extension = MimeTypeMap.getFileExtensionFromUrl(url);
if (extension != null) {
MimeTypeMap mime = MimeTypeMap.getSingleton();
String mimeType = mime.getMimeTypeFromExtension(extension);
if (mimeType != null) {
if (mimeType.toLowerCase().contains("pdf")
|| extension.toLowerCase().contains("ppt")
|| extension.toLowerCase().contains("doc")
|| extension.toLowerCase().contains("rar")
|| extension.toLowerCase().contains("rtf")
|| extension.toLowerCase().contains("exe")
|| extension.toLowerCase().contains("apk")
|| extension.toLowerCase().contains("jpeg")
|| extension.toLowerCase().contains("png")
|| extension.toLowerCase().contains("xls")
|| extension.toLowerCase().contains("zip")
|| extension.toLowerCase().contains("jpg")) {
DownloadManager mdDownloadManager = (DownloadManager)getSystemService(Context.DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(
Uri.parse(url));
String name= URLUtil.guessFileName(url,null,MimeTypeMap.getFileExtensionFromUrl(url));
File destinationFile = new File(Environment.getExternalStorageDirectory(),name);
request.setDescription("Downloading...");
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
// request.setDestinationUri(Uri.fromFile(destinationFile));
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,name);
mdDownloadManager.enqueue(request);
//value = false;
}
}
if (value) {
view.loadUrl(url);
}
if (!url.contains("my site url")) { // Could be cleverer and use a regex
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
return false;
}
return false;
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
wv.loadUrl(mypage_error);
}
}
Когда я нажимаю любую ссылку, содержащую вышеуказанное расширение, файл начинает загрузку внутри приложения веб-просмотра (все в порядке), но в то же время эта ссылка автоматически открывается в моем мобильном браузере. Я знаю, что это происходит из-за этого кода.
if (!url.contains("my site url")) { // Could be cleverer and use a regex
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
return false;
Теперь,
Первое решение. Я хочу знать, как я могу загружать файлы, содержащие указанное выше расширение, внутри приложения веб-просмотра, и все ссылки, которые не содержат указанное расширение, должны открываться за пределами моего приложения веб-просмотра, что означает мобильный браузер.
Второе решение. Если это невозможно, скажите мне, когда я нажимаю на ссылку, как каждый раз показывать предупреждение / всплывающее окно (вариант выбора браузера). Как я уже упоминал, вместо того, чтобы показывать выбор браузера, ссылки для предупреждений автоматически открываются в браузере моего телефона.