Android 通过验证用户名和密码使用重定向 url 在 Web 视图中查看 .pdf 文件
Posted
技术标签:
【中文标题】Android 通过验证用户名和密码使用重定向 url 在 Web 视图中查看 .pdf 文件【英文标题】:Android view .pdf file in web view using redirect url by authenticate user name and password 【发布时间】:2019-01-27 07:58:21 【问题描述】:我想从共享点服务器查看 pdf 文件。 网址链接:https:///sites/iConnect/Lists/FeedList/Attachments/1138/Grasim%20Talent%20Hunt.pdf
它重定向到以下链接: https://login.microsoftonline.com,一旦我登录,响应就会重定向到 pdf 文件 url。
在这个机构中,我如何处理和查看 pdf 文件到 webview。
我试过这个代码片段:
WebView webView = findViewById(R.id.webview);
webView.getSettings().setjavascriptEnabled(true);
webView.loadUrl(uri);
webView.setWebViewClient(new WebViewClient()
@Override
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
if(request.getUrl().toString().endsWith(".pdf"))
String weburl = "https://docs.google.com/gview?embedded=true&url=" + request.getUrl().toString();
view.loadUrl(weburl);
else
view.loadUrl(request.getUrl().toString());
return true;
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
view.loadUrl(url);
return true;
@Override
public void onPageFinished(WebView view, String url)
super.onPageFinished(view, url);
CommonUtils.dismissDialog();
@Override
public void onReceivedError(WebView view, int errorCode,String description,String failingUrl)
//super.onReceivedError(view, request, error);
Toast.makeText(WebViewActivity.this,"Error"+description, Toast.LENGTH_SHORT).show();
);
如果有任何概念,请提出建议
谢谢
拉贾拉詹
【问题讨论】:
WebView 无法显示 pdf 文件开头。 @Rajarajan 你有什么解决办法吗? 有什么解决办法吗?我们需要检测返回中的pdf内容吗? 【参考方案1】:我使用 onPageStarted 而不是 shouldOverrideUrlLoading 并且没有任何问题。 我使用 webView.loadUrl(uri) 而不是 view.loadUrl(weburl)。试试看。
【讨论】:
【参考方案2】:WebView 无法显示 pdf 文件。您可以使用以下代码显示 pdf
if(url.endsWith(".pdf"))
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(url), "application/pdf");
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
else
view.loadUrl(url);
【讨论】:
您错过了有关 URL 重定向的要点。这是这里的主要挑战。否则,我们已经知道我们可以使用您指定的意图。【参考方案3】:如果您可以在 WebView(例如 ImageView)之外呈现 PDF,并且您的目标是 Lollipop (5.0) 及更高版本,则可以使用此功能:
https://developer.android.com/reference/android/graphics/pdf/PdfRenderer
我今天实际上正在尝试它,它对我来说效果很好。我所做的是:
创建一个带有 ImageView 的 Fragment,然后是两个按钮(一个用于后一页,一个用于前进一页) 每次用户前进或后退时,我都会使用Bitmap.createBitmap(w, h, Config.ARGB_8888)
创建一个位图,其中 w 和 h 是 ImageView 在该点的宽度/高度
我请求了给定的页码并传入了示例代码中 mBitmap 所在的新位图
我为生成的位图分配了imageView.setImageBitmap(bitmap)
。
瞧,效果很好。我的代码是一个原型,所以我会对其进行改进,但它可以很好地呈现几十页,而且速度相对较快。黑白页面有明显的延迟,但可能是 1/2 秒。如果我预先加载/缓存了页面,延迟可能会消失。但是,对于我的原型,这并不重要。
我强烈推荐这种方法!
【讨论】:
谢谢,但我认为您错过了有关 URL 重定向的要点。这是这里的主要挑战,而不是如何呈现 pdf。 @auspicious99 那么我认为这个问题需要澄清。是如何拦截登录后的URL吗?从技术上讲,没有提出任何问题,因此很难完全破译。不过,我仍然推荐 PdfRenderer,因为 Google PDF 查看器可以随时被 Google 删除,从而导致应用崩溃。 挑战是从服务器检索 PDF 文件以呈现它。因为向 URL 发送请求不仅会在响应中生成 PDF 文件,而且可能会重定向到身份验证。 好的,那么在我看来,解决方案是让 WebView 通过正常的身份验证流程,如果你拦截 URL 并获取“.pdf”和/或一些 mime -type 应用程序/pdf 的标头,然后保存 URL,但此时停止流。以上是关于Android 通过验证用户名和密码使用重定向 url 在 Web 视图中查看 .pdf 文件的主要内容,如果未能解决你的问题,请参考以下文章
Flask - 如果当前用户未通过身份验证,如何重定向到登录页面?