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を実装する方法ファイルをダウンロードしますか?