55

Вопрос по android – Скачать файл внутри WebView

У меня есть веб-просмотр в моем приложении для Android. Когда пользователь заходит в веб-браузер и щелкает ссылку для загрузки файла, ничего не происходит.

URL = "my url";
mWebView = (WebView) findViewById(R.id.webview);
mWebView.setWebViewClient(new HelloWebViewClient());
mWebView.getSettings().setDefaultZoom(ZoomDensity.FAR);
mWebView.loadUrl(URL);
Log.v("TheURL", URL);

Как включить загрузку внутри веб-просмотра? Если я отключаю веб-просмотр и включаю намерение загрузить URL-адрес в браузере из приложения, тогда загрузка происходит без проблем.

String url = "my url";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);

Может ли кто-нибудь помочь мне здесь? Страница загружается без проблем, но ссылка на файл изображения на странице HTML не работает ...

  • Error: User Rate Limit Exceededfinal String filename= URLUtil.guessFileName(url, contentDisposition, mimetype);

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceededandroidtrainningcenter.blogspot.in/2013/11/…

    от
  • Error: User Rate Limit ExceededwebView.setDownloadListener()Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit ExceededChrome Custom tabsError: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Webview Download File example

    от
  • Вы можете использовать этоWebview подкласс, который обрабатывает загрузки и т.д. автоматически:github.com/delight-im/Android-AdvancedWebView

    от caw
  • Это работает...Android WebView Download File example- Kotlin & Java

    от c49
  • 12

    Code:

        mwebView.setDownloadListener(new DownloadListener()
       {
    
      @Override  
    
    
       public void onDownloadStart(String url, String userAgent,
            String contentDisposition, String mimeType,
            long contentLength) {
    
        DownloadManager.Request request = new DownloadManager.Request(
                Uri.par,se(url));
    
    
        request.setMimeType(mimeType);
    
    
        String cookies = CookieManager.getInstance().getCookie(url);
    
    
        request.addRequestHeader("cookie", cookies);
    
    
        request.addRequestHeader("User-Agent", userAgent);
    
    
        request.setDescription("Downloading file...");
    
    
        request.setTitle(URLUtil.guessFileName(url, contentDisposition,
                mimeType));
    
    
        request.allowScanningByMediaScanner();
    
    
        request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
        request.setDestinationInExternalPublicDir(
                Environment.DIRECTORY_DOWNLOADS, URLUtil.guessFileName(
                        url, contentDisposition, mimeType));
        DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
        dm.enqueue(request);
        Toast.makeText(getApplicationContext(), "Downloading File",
                Toast.LENGTH_LONG).show();
    }});
    

  • 78

    Ты пытался?

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

    Пример ссылки:Загрузка файла Webview - Спасибо @ c49

  • 15

    Попробуйте использовать менеджер загрузок

    который поможет вам загрузить все, что вы хотите, и сэкономит ваше время.

    Проверьте эти варианты:

    Вариант 1 - & gt;

     mWebView.setDownloadListener(new DownloadListener() {
            public void onDownloadStart(String url, String userAgent,
                    String contentDisposition, String mimetype,
                    long contentLength) {
     Request request = new Request(
                                Uri.parse(url));
                        request.allowScanningByMediaScanner();
                        request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
                        request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "download"); 
                        DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
                        dm.enqueue(request);        
    
            }
        });
    

    Вариант 2 - & gt;

    if(mWebview.getUrl().contains(".mp3") {
     Request request = new Request(
                            Uri.parse(url));
                    request.allowScanningByMediaScanner();
                    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
                    request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "download"); 
    // You can change the name of the downloads, by changing "download" to everything you want, such as the mWebview title...
                    DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
                    dm.enqueue(request);        
    
        }
    

  • 42

    Попробуйте это. Пройдя много постов и форумов, я нашел это.

    mWebView.setDownloadListener(new DownloadListener() {       
    
        @Override
        public void onDownloadStart(String url, String userAgent,
                                        String contentDisposition, String mimetype,
                                        long contentLength) {
                DownloadManager.Request request = new DownloadManager.Request(
                        Uri.parse(url));
    
                request.allowScanningByMediaScanner();
                request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); //Notify client once download is completed!
                request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "Name of your downloadble file goes here, example: Mathematics II ");
                DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
                dm.enqueue(request);
                Toast.makeText(getApplicationContext(), "Downloading File", //To notify the Client that the file is being downloaded
                        Toast.LENGTH_LONG).show();
    
            }
        });
    

    Не забудьте дать это разрешение! Это очень важно! Добавьте это в свой файл манифеста (файл AndroidManifest.xml)

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />        <!-- for your file, say a pdf to work -->
    

    Надеюсь это поможет. Ура :)