Android webview没有在按钮点击时生成pdf报告
Posted
技术标签:
【中文标题】Android webview没有在按钮点击时生成pdf报告【英文标题】:Android webview not generating pdf report on button click 【发布时间】:2021-10-01 07:06:22 【问题描述】:我在 android Studio 中使用 WebView 创建了一个网络应用程序。我已经在 android WebView 中加载了一个 WordPress 站点。当我在 chrome 浏览器上加载它时,WordPress 网站会在单击按钮时导出 pdf 报告。
在 chrome 中加载的网站
当我点击 PDF 按钮时显示窗口
和
最后它开始下载 pdf 文件
生成的 pdf 报告如下所示:
但是当我使用在 WebView 中创建的 Android 应用程序时会出现问题。当我单击 PDF 按钮时,它什么也不做,我得到一个调试日志
D/cr_Ime: [InputMethodManagerWrapper.java:59] isActive: true
[InputMethodManagerWrapper.java:68] hideSoftInputFromWindow
我已将清单权限设置为
uses-permission android:name="android.permission.INTERNET"
代码在这里 private static final String WEB_URL = "http://workmanager.midzonetechnologies.com/";
webView = findViewById(R.id.webView);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setAllowContentAccess(true);
webView.getSettings().setDatabaseEnabled(true);
webView.getSettings().setAllowFileAccessFromFileURLs(true);
webView.getSettings().setAllowUniversalAccessFromFileURLs(true);
webView.getSettings().setBlockNetworkLoads(false);
webView.getSettings().setAppCacheMaxSize( 10 * 1024 * 1024 ); // 10MB
webView.getSettings().setAppCachePath(getApplicationContext().getCacheDir().getAbsolutePath() );
webView.getSettings().setAllowFileAccess( true );
webView.getSettings().setAppCacheEnabled( true );
webView.getSettings().setjavascriptEnabled( true );
webView.getSettings().setCacheMode( WebSettings.LOAD_DEFAULT );
webView.setWebViewClient(new WebViewClient());
webView.setWebChromeClient(new WebChromeClient());
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(WEB_URL);
请问是manifest文件权限或运行时权限相关的问题,请给出解决方案。
我在 WebView 中创建的 Android 应用。
【问题讨论】:
你在 Android 11 上测试它吗? 【参考方案1】:您在 Chrome 中看到的情况是:
注意基于路径的可下载文件:mywebsite.com/randomPath/randomFile**.pdf** 请求下载权限 将文件下载到本地存储 使用 Google 云端硬盘打开 PDF 文件如果你想要这种行为,你必须在你的应用程序中编写所有这些步骤。
一个快速的解决方案是截取url,检查它是否是pdf文件,然后使用浏览器打开它。
webView.webviewClient = object : WebViewClient()
@TargetApi(Build.VERSION_CODES.N)
fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest): Boolean
val url = request.url.toString()
if (url.takeLast(4) == ".pdf")
startActivity(
Intent(
Intent.ACTION_VIEW,
"https://docs.google.com/gview?embedded=true&url=$request.url"
)
)
return true
return false
【讨论】:
在 chrome 浏览器中发生的事情也应该在 WebView 中发生。我认为数据是从数据库中获取的,并且 pdf 文件是动态创建的。所以我们不能使用 url 并让 WebView 做剩下的事情。当我单击 PDF 按钮时,InputMethodManagerWrapper 禁用了软输入模式。请告诉如何解决这个问题。 Webview 无法显示 pdf 文件。 为什么它不能像在 chrome 浏览器中那样工作。请阅读我的完整问题并理解它。【参考方案2】:您可能必须在此处执行不同的步骤。正如@Florin T. 所说,您首先必须获得您的应用所需的权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
在下一步中,您将检测系统是否可以下载任何内容。
可以这样做:
mWebView.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);
);
Source here
如果您随后单击 WebView 中的 PDF 按钮,系统应该正在处理您手机上的下载。这意味着您可以像通过 chrome 下载一样打开您的下载。
在最后一步中,您必须从下载中获取保存的位置并启动一个 Intent 以使用本地 PDF 应用程序打开它。这可以通过 android Intent 完成。
【讨论】:
我收到一个错误.....没有找到处理 Intent 的 Activity act=android.intent.action.VIEW dat=blob:workmanager.midzonetechnologies.com/… 我已经删除了网址的“blob:”部分,但下载仍然无法正常工作。 您是否提供了确切的下载链接?是否有可能在该链接后面似乎有下载但不是?您可以通过转到现在的浏览器并输入该链接来验证这一点。如果它打开一个“下载框”(Windows 或 Mac 正常),那么下载应该没问题? 它在windows和android浏览器中下载得很好。仅在 WebView 中出现的问题。 这个帖子可能对你有帮助:***.com/questions/10069050/…以上是关于Android webview没有在按钮点击时生成pdf报告的主要内容,如果未能解决你的问题,请参考以下文章
android webview和loadData,我可以让后退按钮返回生成的内容吗?
通过Android WebView中的javascript检测点击HTML按钮