Код диспетчера загрузки не работает в Android WebView
для устройств Oreo, но он хорошо работает для более старых версий. В случае, если это не устройства Oreo, он выполняет "загрузку файла" и загружается, но в случае Oreo принудительно закрывается (сбой)
Ниже приведен код, который я использую (фрагмент)
webView.setDownloadListener(new DownloadListener() {
@Override
public void onDownloadStart(String url, String userAgent,
String contentDisposition, String mimetype,
long contentLength) {
DownloadManager.Request request = new DownloadManager.Request(
Uri.parse(url));
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, URLUtil.guessFileName(url, contentDisposition, mimetype));
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); //Notify client once download is completed!
DownloadManager dm = (DownloadManager) getActivity().getSystemService(DOWNLOAD_SERVICE);
dm.enqueue(request);
Toast.makeText(getActivity().getApplicationContext(), "Downloading File", //To notify the Client that the file is being downloaded
Toast.LENGTH_LONG).show();
}
});
Это код, который я понял и работает для меня.
ПРИМЕЧАНИЕ: код был выполнен фрагментом, для основного действия удалите getActivity().
в декларации дать разрешение
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Учебник для получения разрешения
КОД:
webView.setDownloadListener(new DownloadListener() {
@Override
public void onDownloadStart(String url, String userAgent,
String contentDisposition, String mimetype,
long contentLength) {
DownloadManager.Request request = new DownloadManager.Request(
Uri.parse(url));
if(Build.VERSION.SDK_INT <= 26 ){
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, URLUtil.guessFileName(url, contentDisposition, mimetype));
}
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); //Notify client once download is completed!
DownloadManager dm = (DownloadManager) getActivity().getSystemService(Context.DOWNLOAD_SERVICE);
dm.enqueue(request);
Toast.makeText(getActivity().getApplicationContext(), "Downloading File", //To notify the Client that the file is being downloaded
Toast.LENGTH_LONG).show();
}
});
Попробуйте убрать предварительную загрузку шрифтов, удалив
<meta-data
android:name="preloaded_fonts"
android:resource="@array/preloaded_fonts" />
Источник Webview в Oreo не работает