Utilice la clase DownloadManager para descargar el archivo desde WebView

Tengo este pequeño código aquí cuando hago clic en un enlace en webview que es un enlace a un archivo, en este caso .mp4. este código irá al navegador web predeterminado y solicitará la aplicación que pueda ver este tipo de archivo.

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

Lo que quiero es que cuando haga clic en el enlace del archivo, se cree un cuadro de diálogo en el que se solicite el tiempo para descargar o ver el archivo. Si hago clic en descargar, quiero usar la clase DownloadManager para manejarlo y descargar ese archivo en segundo plano y alertar cuando se complete. Y si hace clic en la vista, quiero crear una intención que solicite una aplicación que pueda ver este archivo sin tener que ir al navegador 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;
    }
}

Ahora tengo este código que solicita al usuario que descargue o reproduzca el archivo mp4 en el que el usuario hizo clic. Pero cuando hago clic en Reproducir o en Descargar, funciona hasta que hago clic en el enlace la segunda vez, ¿qué ocurre con el código anterior? Si alguien puede corregirlo, por favor. Gracias.

Soy muy nuevo en el desarrollo de Android y Java, si alguien me puede guiar a través de esto, me ayudará a aprender más rápido. Y también lo siento por mi inglés ...

Respuestas a la pregunta(1)

Su respuesta a la pregunta