java - Android:PDF从webview下载为空
问题描述
我的应用程序中有一个 webview,用户可以从 html 表单下载不同的 pdf。该文件以正确的名称和格式等下载,但它总是下载空/损坏。我想这可能是一个会话问题,但我不知道。想知道是否有人可以建议。谢谢
public class HomeFragment extends FilePickController {
private FragmentHomeBinding binding;
private WebView webView;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
HomeViewModel homeViewModel = new ViewModelProvider(this).get(HomeViewModel.class);
binding = FragmentHomeBinding.inflate(inflater, container, false);
View root = binding.getRoot();
webView = (WebView) root.findViewById(R.id.homeWebview);
webView.setWebChromeClient(new WebChromeClient());
webView.loadUrl("hidden");
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
return false;
}
});
webView.setWebChromeClient(returnClient());
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webView.setDownloadListener(new DownloadListener() {
@Override
public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimeType, long contentLength) {
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
request.setMimeType(mimeType);
//------------------------COOKIE!!------------------------
String cookies = CookieManager.getInstance().getCookie(url);
request.addRequestHeader("cookie", cookies);
//------------------------COOKIE!!------------------------
request.addRequestHeader("User-Agent", userAgent);
request.setDescription("Downloading file...");
request.setTitle(URLUtil.guessFileName(url, contentDisposition, mimeType));
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, URLUtil.guessFileName(url, contentDisposition, mimeType));
DownloadManager dm =(DownloadManager) getActivity().getSystemService(Context.DOWNLOAD_SERVICE);
dm.enqueue(request);
Toast.makeText(getContext(), "Downloading File", Toast.LENGTH_LONG).show();
}
});
return root;
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
}
解决方案
推荐阅读
- matlab - fprintf:某个点后的新行
- angularjs - 获取在angularjs上动态变化的数据
- jquery - 对外键模型的 Ajax 调用上的 Django 方法不允许状态 405
- android - 任务“:app:processArm64DebugResources”执行失败。> 执行 aapt 失败
- php - 我需要在 Symfony 框架中关闭显示错误
- vue.js - How to loop thru 3 arrays using only one v-for?
- apollo - 如何在 apollo 链接中返回错误响应?
- spring - 如何动态创建 Spring Integration MessageChannels
- java - IntelliJ 终端 jdk 设置
- angular - 即使我不保存更改,Visual Studio Code 也会继续编译