2013-06-13 32 views
8

Webview kullanarak dosyayı (.mp3 gibi) web sitesinden indirmek istiyorum ama sorun bağlantıya dokunduğumda, tarayıcı açılacak (Varsayılan bir) Hangisidir? kapanmadan önce bir saniye için görünür. ve hiçbir dosya indirilmedi. Dosyayı webview kullanarak nasıl indirebilirim? (bu durum garip)

İşte benim kod

,

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

Ayrıca dosya indirme otomatik olarak işlenir bu 'Webview' alt sınıfı kullanabilir: https://github.com/delight-im/Android-AdvancedWebView – caw

cevap

9

sizin WebView'da ile kullanmak için bir WebViewClient uygulamak. İçinde, bir mp3 dosyası olup olmadığını kontrol etmeniz gereken shouldOverrideUrlLoading yöntemini geçersiz kılın, ardından bu URL'yi DownloadManager'a veya dosyayı gerçekten indirmek için kullandığınız her şeye aktarın.

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

için çok teşekkürler İşte kaba bir fikir Cevabınız için çok fazla, Ama eğer aklınıza gelirse, Lütfen bana bu yöntemin bir örneğini verin. Java'da gerçekten yeni biriyim. –

+0

İlgili bir kod örneği ekledim. – Krylez

+1

@Krylez bu downloding dosyası ama benim testpdf.php içinde pdf dosyası içeren ve http://www.tttt.co/testpdf.php dosyası gibi url runt sonra pdf dosyası indirmek değil ama testpdf indir o bir sorun var .php dosyası bu yüzden cany bana yardım pdf dosyasını indirmek istiyorum – 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

Çok teşekkürler bu çekicilik gibi çalışır .. –