Użyj klasy DownloadManager, aby pobrać plik z WebView

Mam ten mały kod tutaj, gdy klikam link na webview, który jest linkiem do pliku, w tym przypadku .mp4. ten kod przejdzie do domyślnej przeglądarki internetowej i aplikacji żądającej, która może wyświetlić ten typ pliku.

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

To, czego chcę, to kliknięcie tego linku do pliku i utworzenie okna dialogowego z prośbą o pobranie lub wyświetlenie pliku przez pogodę. Jeśli klikniesz pobierz, chcę użyć klasy DownloadManager do obsługi i pobrania tego pliku w tle i powiadomienia po zakończeniu. A jeśli widok kliknięcia, chcę stworzyć intencję, która prosi o aplikację, która może wyświetlać ten plik bez przechodzenia do przeglądarki internetowej.

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

Teraz otrzymałem ten kod, który monituje użytkownika o pobranie lub odtworzenie pliku mp4, który kliknął użytkownik. Ale kiedy klikam Odtwórz lub Pobierz, to działa, dopóki nie kliknę linku po raz drugi, co jest nie tak z powyższym kodem, jeśli ktoś może to poprawić. dzięki.

Jestem bardzo nowy w rozwijaniu Androida i java, jeśli ktoś mógłby mnie przez to poprowadzić, pomoże mi się uczyć szybciej. I przepraszam za mój angielski ...

questionAnswers(1)

yourAnswerToTheQuestion