Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [ANDROID] Permettere il download all'interno di una WebView

    Mi sto cimentando con la programmazione mobile con Android Studio. Per il momento ho dovuto fare un'applicazione "semplice" che ha al suo interno solo una WebView che mostra un sito web ottimizzato per il mobile; l'utente deve navigare all'interno del sito solo usando la WebView. Ma ho un problema quando si tratta di far scaricare dei file: dapprima cliccando sul link per scaricare non accadeva nulla; ora, cercando in giro, ho trovato da più parti l'idea di inserire questo codice:

    codice:
    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);
            }
        });
    Il problema però è che ora cliccando sul link del file da scaricare viene chiesto all'utente con quale browser aprire il link, l'utente sceglie, si apre il browser e tutto va in errore in quanto il link è valido solo se è stato effettuato il login, il quale viene sì effettuato nel sito visualizzato nella WebView ma ovviamente quando l'utente apre il link con un altro browser, così come chiesto dal telefonino, nell'altro browser il login non è stato effettuato e quindi viene stampato un messaggio di errore.
    Spero di essermi spiegato chiaramente. Qualcuno sa dirmi come risolvere?
    Grazie!

  2. #2
    ciao!

    prova a dare un'occhiata qua.
    un utente propone due alternative usando DownloadManager: http://stackoverflow.com/questions/1...inside-webview

  3. #3
    Grazie... uno dei suggerimenti riportati funziona, ora sto tribolando un po' per far farlo funzionare come serve a me!

  4. #4
    Sono riuscito con questo codice a far scaricare il file e dandogli il nome giusto:

    codice:
    mWebView.setDownloadListener(new DownloadListener() {
    
        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, android.webkit.URLUtil.guessFileName(url, contentDisposition, mimetype));
            DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
            dm.enqueue(request);
            Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); //This is important!
    intent.addCategory(Intent.CATEGORY_OPENABLE); //CATEGORY.OPENABLE
    intent.setType("*/*");//any application,any extension
    Toast.makeText(getApplicationContext(), "Download file", //To notify the Client that the file is being downloaded
    Toast.LENGTH_LONG).show();
        }
    });

    Il problema ora è che l'URL da scaricare è in realtà una pagina dinamica (ASPX) che controlla che l'utente abbia fatto login e poi gli invia il file, ma ciò che viene scaricato è l'HTML della pagina generatrice e non il file.
    In ASP.NET uso TransmitFile per mandare il file all'utente, ma chissà perché non invia il file indicato. Se facessi un Response.Redirect funzionerebbe tutto (perché i file hanno anche degli URL diretti da cui si possono scaricare), solo che:
    1. non vogliamo che l'utente conosca l'URL diretto del file
    2. siccome i file possono anche essere dei TXT, questi vengono aperti direttamente nel browser mentre vorremmo forzare sempre il download, ma forzandolo viene scaricata la pagina generatrice e non il file...
    Non so come uscirne...

  5. #5
    Utente di HTML.it L'avatar di Misterxxx
    Registrato dal
    Oct 2003
    Messaggi
    3,706
    non credo sia la strada giusta
    per ottenere il risultato di una pagina php utilizzo JSON e credo che dovresti fare lo stesso dato che pure asp è uno script lato server
    inoltre, il codice postato è deprecato e si dice con diverse falle, se devi approcciare ex-novo guarda la classe Volley
    Io ne ho viste cose che voi umani non potreste immaginare. Navi da combattimento in fiamme al largo dei bastioni di Orione e ho visto i raggi B, balenare nel buio vicino le porte di Tannhäuser. E tutti quei momenti ... andranno ... perduti nel tempo, come lacrime nella pioggia. È tempo di morire. (Roy Batty).

  6. #6
    Grazie per la tua risposta.. alla fine, data la fretta, abbiamo lasciato quel codice lì e non offriamo agli utenti lo scarico dei file TXT ma solo PDF...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.