2016-08-15 4 views
0

私は非常に最初のアプリを開発しています。私はwebviewのURLからいくつかのpdfファイルをダウンロードしたいと思いますが、いくつか問題があります。私はsetDownloadListenerを使ってみましたが、私はいくつかのpdfビューアを私の電話にインストールしていましたが、ブラウザーでファイルを開くことができました(Webでログインが必要なので、私のアプリケーションは役に立ちません)とOfficeSuiteで、ファイル名に問題があるため(ダウンロード時のみ)問題が発生しているので、webviewでダウンロードしてから開くことができます。 このため、私はAsyncTaskを使うことができました。同様の例に続いて、私はそれがこのようなものになるだろうと思うが、私はそれを実装する方法がわからない:AsyncTaskでタブ内のwebviewからファイルをダウンロード

private class DownloadTask extends AsyncTask<String, Void, Void> { 

    private static final String TAG = "TAG"; 
    @Override 
    protected Void doInBackground(String... sUrl) { 
     InputStream input = null; 
     OutputStream output = null; 
     HttpURLConnection connection = null; 
     try { 
      URL url = new URL(sUrl[0]); 
      String filename = url.getFile(); 
      connection = (HttpURLConnection) url.openConnection(); 
      connection.connect(); 

      if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) { 
       Log.e(TAG, "Server didn't return 200. "); 
       // handle error 
       return null; 
      } 

      input = connection.getInputStream(); 
      output = new FileOutputStream(Environment.getExternalStorageDirectory().getPath() + filename); // where to save file 

      byte data[] = new byte[4096]; 
      int count; 
      while ((count = input.read(data)) != -1) { 
       if (isCancelled()) { 
        return null; 
       } 
       output.write(data, 0, count); 
      } 
     } catch (Exception e) { 
      // handle error 
      Log.e(TAG, "Exception: ", e); 
     } finally { 
      try { 
       if (output != null) 
        output.close(); 
       if (input != null) 
        input.close(); 
      } catch (IOException e) { 
       Log.e(TAG, "IOException: ", e); 
      } 

      if (connection != null) 
       connection.disconnect(); 
     } 
     return null; 

    } 
} 

次のようにミTabFragmentがある:

public class TabFragment extends Fragment { 

@Nullable 
@Override 
@SuppressLint("SetJavaScriptEnabled") 

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.web_layout, container, false); 
    final WebView webView = (WebView) rootView.findViewById(R.id.webView); 

    webView.setWebViewClient(new WebViewClient()); 
    WebSettings webSettings = webView.getSettings(); 
    //Activate Javascript: 
    webSettings.setJavaScriptEnabled(true); 
    //Trying to download pdf: 
    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); 
     } 
    }); 

    webView.getSettings().setSupportMultipleWindows(true); 
    webView.setWebChromeClient(new WebChromeClient()); 
    String appCachePath = getActivity().getApplicationContext().getCacheDir().getAbsolutePath(); 
    webView.getSettings().setAllowFileAccess(true); 
    webView.getSettings().setAppCachePath(appCachePath); 
    //Loading the URL: 
    webView.loadUrl("myweb.com"); 
    //Going back: 
    webView.setOnKeyListener(new View.OnKeyListener() { 
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      if ((keyCode == KeyEvent.KEYCODE_BACK) && event.getAction() == KeyEvent.ACTION_DOWN) { 
       if (webView.canGoBack()) { 
        webView.goBack(); 
        return true; 
       } 
      } 
      return false; 
     } 
    }); 

    return rootView; 


    } 
} 

にAsyncTaskを実装する方法ファイルをダウンロードしますか?

答えて

0

最後に、DownloadManagerで解決しました。

関連する問題