2014-04-24 26 views
0

我使用WebView創建了一個Android應用程序,但我面臨的唯一問題是文件在默認瀏覽器中打開而不是下載。如何強制文件在應用程序中下載,而不是在默認瀏覽器中顯示

這是WebActivity代碼:

public class WebActivity extends Activity { 
private WebView webView; 

public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    webView = (WebView) findViewById(R.id.webView01); 
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.setWebViewClient(new myWebClient() 
    { 
    @Override 
    public void onPageFinished(WebView view, String url) { 

     findViewById(R.id.imageLoading1).setVisibility(View.GONE); 

     findViewById(R.id.webView01).setVisibility(View.VISIBLE); 
    } 


});  
    webView.loadUrl("domain"); 
    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); 
     } 
    }); 

} 


public class myWebClient extends WebViewClient 
{ 
    @Override 
    public void onPageStarted(WebView view, String url, Bitmap favicon) { 
     super.onPageStarted(view, url, favicon); 
    } 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 

     view.loadUrl(url); 
     return true; 
    } 
} 

@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) 
    { 
    if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) { 
    webView.goBack(); 
    return true; 
} 
return super.onKeyDown(keyCode, event); 
    } 
    } 

回答

0

瀏覽應用程序正在打開,因爲這是適當應用來處理Intent的控股URL作爲他們的數據,這是你用你的DownloadListener什麼。

如果您不希望瀏覽器啓動,請打開一個InputStream,使用您的DownloadListener中的URL並自己從文件中提取字節。

public void saveUrl(final String filename, final String urlString) 
    throws MalformedURLException, IOException { 
    BufferedInputStream in = null; 
    FileOutputStream fout = null; 
    try { 
     in = new BufferedInputStream(new URL(urlString).openStream()); 
     fout = new FileOutputStream(filename); 

     final byte data[] = new byte[1024]; 
     int count; 
     while ((count = in.read(data, 0, 1024)) != -1) { 
      fout.write(data, 0, count); 
     } 
    } finally { 
     if (in != null) { 
      in.close(); 
     } 
     if (fout != null) { 
      fout.close(); 
     } 
    } 
} 
+0

感謝您的回覆 - 我試過的InputStream但同樣它在一個新的瀏覽器打開可以請你提供 – user3566830

+0

@ user3566830我添加的代碼從URL中的文件保存到一個文件中的代碼我的答案。 – AxiomaticNexus

+0

感謝您的代碼,但它仍然不工作我添加的代碼之後 webView.setDownloadListener(新DownloadListener(){ 和公共無效onDownloadStart(URL字符串,字符串的userAgent, 可以請你更具體的前在哪裏添加代碼 – user3566830

相關問題