2013-06-13 17 views
8

Ich möchte die Datei (wie .mp3) von der Website mit webview herunterladen, aber das Problem ist Immer wenn ich auf den Link tippen, wird es den Browser öffnen (Standard) Welches ist Für eine Sekunde vor dem Schließen erscheinen. und keine Datei wurde heruntergeladen.Wie kann ich die Datei mithilfe von Webview herunterladen? (Dieser Fall ist seltsam)

Hier ist mein 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; 
} 

    } 
+0

Sie auch diese 'Webview' Unterklasse verwenden können, wenn Datei-Downloads automatisch behandelt werden: https://github.com/delight-im/Android-AdvancedWebView – caw

Antwort

9

ein WebViewClient Implementieren mit WebView zu verwenden. Überschreiben Sie dabei die Methode shouldOverrideUrlLoading, in der Sie prüfen sollten, ob es sich um eine MP3-Datei handelt, und übergeben Sie diese URL dann an die DownloadManager oder was auch immer Sie verwenden, um die Datei tatsächlich herunterzuladen. Hier ist eine grobe Vorstellung:

// 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's 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's 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; 
     } 
    }); 
+0

Danke so viel für die Antwort, Aber wenn Sie etwas dagegen haben, Bitte geben Sie mir ein Beispiel für diese Methode. Ich bin buchstäblich Neuling in Java. –

+0

Ich habe ein entsprechendes Codebeispiel hinzugefügt. – Krylez

+1

@Krylez es ist Downloding-Datei, aber ich habe ein Problem, das in meiner testpdf.php pdf-Datei enthalten und wenn ich runt URL wie http://www.tttt.co/testpdf.php Datei dann ist es nicht Download-PDF-Datei, aber es herunterladen testpdf .php Datei so cany hilf mir ich möchte pdf-Datei herunterladen – CoronaPintu

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

    } 
+0

Vielen Dank funktioniert es wie ein Charme .. –