Вопрос по android-intent, java, android, webview – Используйте класс DownloadManager для загрузки файла из WebView

3

У меня есть этот маленький код здесь, когда я нажимаю на ссылку в веб-представлении, которая является ссылкой на файл, в данном случае .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, если кто-то может помочь мне в этом, это поможет мне учиться быстрее. А также извините за мой английский ...

Ваш Ответ

1   ответ
0

который пытается загрузить ваше веб-представление. Создать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 для скачивания обработать загрузку файла или запустить намерение для просмотра.

Я просто обновил вопрос с помощью кода, чтобы предложить пользователю загрузить и воспроизвести файл, но есть некоторая проблема: когда я нажимаю на ссылку, она не работает, пока я не нажму на ссылку во второй раз, пожалуйста, помогите исправить этот код. homi3kh
if (url.endsWith(".mp4")) { AlertDialog.Builder builder = new AlertDialog.Builder(?); builder.setMessage(R.string.dialog_title) .setCancelable(false) .setPositiveButton(R.string.dialog_download, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int ?) { // how i put async to download? } }) .setNegativeButton(R.string.dialog_play, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int ?) { // how to create intent to view mp4? } }); AlertDialog alert = builder.create(); return false; } homi3kh
перейдите по ссылке, которую я предоставил, чтобы использовать асинхронную задачу для загрузки. Создание намерения для просмотра mp4 может быть выполнено примерно так:android-er.blogspot.ca/2011/05/…

Похожие вопросы