使用下载管理器类,从的WebView下载文件(Use DownloadManager class t

2019-07-31 03:14发布

我在这里有这个小代码时,点击网页流量的链接是一个文件的链接,在这种情况下.MP4。 此代码将进入默认的Web浏览器,并请求应用程序,可以查看此文件类型。

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);
    }
});

我想要的是当我点击该文件链接,它创建一个对话框,询问天气,下载或查看该文件。 如果点击下载,我想使用下载管理器类来处理它,完成后下载该文件的背景和警觉。 如果单击视图,我想创建的意图是要求应用程序,可以不用去的Web浏览器查看此文件。

    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,如果有人能指导我这个它会帮助我学得更快。 而且也对不起我的英语水平?

Answer 1:

你的问题的解决依赖于拦截你的WebView试图加载的URL。 创建WebViewClient并覆盖shouldOverrideUrlLoading方法:

public boolean shouldOverrideUrlLoading(WebView view, String url) {
    if (url.endsWith(".mp3")) { //or whatever other extension
      //Prompt user for action (save or view)
    }
    return false;
 }

然后,根据用户选择什么,启动的AsyncTask下载处理下载文件,或启动意图进行查看。



文章来源: Use DownloadManager class to download file from WebView