2013-06-13 16 views
8

webview を使用してウェブサイトからファイル(.mp3など)をダウンロードしたいが、問題はリンクをタップするとブラウザが開きます(デフォルトのもの) それが閉じる前に1秒間表示されます。ファイルはダウンロードされませんでした。ここでwebviewを使用してファイルをダウンロードするにはどうすればよいですか?

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

あなたはまた、ファイルのダウンロードが自動的に処理され、この 'Webview'サブクラス使用できます:https://github.com/delight-im/Android-AdvancedWebViewを – caw

答えて

9

があなたのWebViewで使用するWebViewClientを実装し、私のコードです。その中で、shouldOverrideUrlLoadingメソッドをオーバーライドします。ここで、mp3ファイルであるかどうかを確認し、そのURLをDownloadManagerに渡すか、実際にファイルをダウンロードするために使用しています。

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

はとてもありがとう はここで大まかなアイデアですしかし、もしあなたが気にしているなら、その方法の例を教えてください。私はJavaで文字通り初心者です。 –

+0

関連するコード例を追加しました。 – Krylez

+1

@Krylezファイルをダウンローディングしていますが、私のtestpdf.phpにはpdfファイルが含まれていますが、http://www.tttt.co/testpdf.phpファイルのようなrunt urlの場合、pdfファイルはダウンロードされませんが、testpdf .phpファイルなので、canyがpdfファイルをダウンロードしたいのですが – 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

ありがとうございました。 –

関連する問題