Используйте класс DownloadManager для загрузки файла из WebView
У меня есть этот маленький код здесь, когда я нажимаю на ссылку в веб-представлении, которая является ссылкой на файл, в данном случае .mp4. этот код переходит в веб-браузер по умолчанию и запрашивает приложение, которое может просматривать файлы этого типа.
myWebView.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);
}
});
Что я хочу, так это когда я нажимаю эту ссылку на файл, она создает диалог, который запрашивает погоду, чтобы загрузить или просмотреть файл. Если нажать «Загрузить», я хочу использовать класс DownloadManager для его обработки и загрузки этого файла в фоновом режиме и оповещения по завершении. И если нажать кнопку просмотра, я хочу создать намерение, которое запрашивает приложение, которое может просматривать этот файл, не заходя в веб-браузер.
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, final String url) {
if (url.endsWith(".mp4")) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage(R.string.dialog_title)
.setCancelable(false)
.setPositiveButton(R.string.dialog_download, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
request.setDescription("Some descrition");
request.setTitle("Some title");
// in order for this if to run, you must use the android 3.2 to compile your app
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "name-of-the-file.ext");
// get download service and enqueue file
DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
manager.enqueue(request);
}
})
.setNegativeButton(R.string.dialog_play, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.setDownloadListener(new DownloadListener() {
public void onDownloadStart(String url, String userAgent,
String contentDisposition, String mimetype,
long contentLength) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(url), "video/mp4");
startActivity(intent);
}
});
}
});
AlertDialog alert = builder.create();
alert.show();
}
return false;
}
}
Теперь я получил этот код, который подсказывает пользователю скачать или воспроизвести файл mp4, по которому пользователь щелкнул. Но когда я нажимаю кнопку «Воспроизвести» или «Загрузить», это работает, пока я не нажму на ссылку во второй раз, что не так с кодом выше, если кто-то может исправить это, пожалуйста. Благодарю.
Я очень новичок в разработке для Android и Java, если кто-то может помочь мне в этом, это поможет мне учиться быстрее. А также извините за мой английский ...