2012-04-09 4 views
45

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

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 не работает ...

+0

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

ответ

64

Вы пробовали?

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

Это просто перезагружает страницу HTML в браузере. Было бы лучше, если URL-адрес вложения открывается в браузере. Спасибо за ответ. Оцените его. –

+0

Можете ли вы разместить свой URL-адрес? – user370305

+0

http://demo.rdmsonline.net/incidentinfo.aspx?incid=la%2fMDMOBS4VeBNKk6yNz%2fg%3d%3d это мой url –

15

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

Проверка тех вариантов:

Вариант 1 ->

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

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

    } 
31

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

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

Надеюсь, это поможет. Приветствия :)

+8

Спасибо, что сработало !, для использования исходного имени файла мы можем использовать: 'final String filename = URLUtil.guessFileName (url, contentDisposition, mimetype);' – Jawaad

+7

@SaiZ Ваш пример содержит некоторый код о неиспользованном намерении, я думаю, вы должны убери это. –

+0

@ j.c я удалил неиспользуемый код, спасибо за сообщение об этом;) – MatPag

7
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.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(); 
}}); 
+0

, пожалуйста, объясните, что вы написали. просто кода недостаточно – Saveen

+0

Настройка файлов cookie сэкономила мой день! Благодаря! –

Смежные вопросы