How to upload a file using webview? (this case is strange)

I want to download a file (e.g. .mp3) from a website using webview but the problem is that whenever I click on the link, it will open a browser (by default) which appears for a second before It closes. and the files did not load.

Here is my code,

import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.webkit.WebView; import android.webkit.WebViewClient; import android.webkit.WebChromeClient; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.webkit.DownloadListener; import android.widget.Button; import android.widget.TextView; public class Main extends Activity { WebView webview; Button bt_search; TextView txt_search; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); webview = (WebView) findViewById(R.id.webView); webview.setWebChromeClient(new WebChromeClient()); webview.getSettings().setJavaScriptEnabled(true); webview.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); } }); txt_search = (TextView) findViewById(R.id.song); webview.loadUrl("http://www.google.com"); bt_search = (Button) findViewById(R.id.findit); bt_search.setOnClickListener(new OnClickListener() { public void onClick(View v) { String keyword = txt_search.getText().toString().trim(); if (!keyword.equals("")) { webview.loadUrl("MP3 Sites" + keyword + ".html"); } } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } } 
+8
java android download webview mp3
source share
2 answers

Deploy WebViewClient for use with your WebView. In it, override the shouldOverrideUrlLoading method, where you should check if it is an mp3 file, and then pass that DownloadManager URL or whatever you use to actually download the file. Here is a rough idea:

  // This will handle downloading. It requires Gingerbread, though final DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); // This is where downloaded files will be written, using the package name isn't required // but it a good way to communicate who owns the directory final File destinationDir = new File (Environment.getExternalStorageDirectory(), getPackageName()); if (!destinationDir.exists()) { destinationDir.mkdir(); // Don't forget to make the directory if it not there } webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading (WebView view, String url) { boolean shouldOverride = false; // We only want to handle requests for mp3 files, everything else the webview // can handle normally if (url.endsWith(".mp3")) { shouldOverride = true; Uri source = Uri.parse(url); // Make a new request pointing to the mp3 url DownloadManager.Request request = new DownloadManager.Request(source); // Use the same file name for the destination File destinationFile = new File (destinationDir, source.getLastPathSegment()); request.setDestinationUri(Uri.fromFile(destinationFile)); // Add it to the manager manager.enqueue(request); } return shouldOverride; } }); 
+9
source share
 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); } 
+2
source share

All Articles