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