Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android WebView-使用Google文档打开PDF重定向问题_Android_Pdf_Google Docs - Fatal编程技术网

Android WebView-使用Google文档打开PDF重定向问题

Android WebView-使用Google文档打开PDF重定向问题,android,pdf,google-docs,Android,Pdf,Google Docs,我有一个奇怪的问题,似乎只发生在少数几个物理设备(Nexus4、Nexus7)上,所有这些设备都运行最新的Android操作系统。我不能在我的老LG测试手机上复制它,也不能在我使用的任何Genymotion模拟器上复制它;我尝试过各种API级别和各种模拟器设备,但它从未在模拟器中出现过 问题是,当调用PDF url时(使用谷歌文档加载),它似乎只是一次又一次地重新定向,最终失败。我不确定这是否是幕后真正发生的事情,但这是它的表现 我们有WebViewClient代码来截取URL,并在URL包含“

我有一个奇怪的问题,似乎只发生在少数几个物理设备(Nexus4、Nexus7)上,所有这些设备都运行最新的Android操作系统。我不能在我的老LG测试手机上复制它,也不能在我使用的任何Genymotion模拟器上复制它;我尝试过各种API级别和各种模拟器设备,但它从未在模拟器中出现过

问题是,当调用PDF url时(使用谷歌文档加载),它似乎只是一次又一次地重新定向,最终失败。我不确定这是否是幕后真正发生的事情,但这是它的表现

我们有WebViewClient代码来截取URL,并在URL包含“.pdf”时适当地更改/加载它。以下是用于此目的的Java代码:

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    if (url != null && url.toLowerCase().contains(".pdf")) {
        url = "http://docs.google.com/gview?embedded=true&url=" + url;
    }
    view.loadUrl(url);
    return true;
}
以下是我们正在使用的WebView设置(如果需要):

webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setPluginState(null);
webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webview.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
webview.getSettings().setPluginState(PluginState.ON);
webview.getSettings().setLoadWithOverviewMode(true);
webview.getSettings().setUseWideViewPort(true);
webview.getSettings().setSupportZoom(true);
webview.getSettings().setAppCacheEnabled(true);
webview.clearCache(false);
webview.getSettings().setBuiltInZoomControls(true);
在日志中,我们看到当webview尝试加载(在失败的设备上)时,会反复打印这些内容:

08-27 17:28:35.135 10460-10460/com.myapp.mobile W/BindingManager﹕ 无法调用determinedVisibility()-从未看到pid:10460的连接
08-27 17:28:35.135 10460-10460/com.myapp.mobile E/url﹕ https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=http://.pdf
我不知道为什么它会一次又一次地附加Google文档URL,但我怀疑这是问题的一部分。我们怀疑该应用程序可能试图使用谷歌硬盘或其他东西来打开它,但我们并没有100%做到这一点。我只是不知道为什么有些设备可以正常工作,但很多设备都不能正常工作

关于调试这个的方法有什么想法吗?我想我可能需要稍微改变一下shouldOverrideUrlLoading()方法,但是我有点困惑,不知道该怎么做。也许view.loadUrl()行导致该方法被反复调用,但这仍然让我有点困惑,为什么它在某些设备上工作而在其他设备上不工作

不确定这是否重要,但即使在模拟器中运行,我也会在日志中打印这一行(即使网站运行良好):

08-29 00:01:45.821 14306-14306/com.myapp.mobile E/url﹕ http://docs.google.com/gview?embedded=true&url=http://.pdf

任何建议都将不胜感激

我们找到了一个解决方案,虽然不是很优雅。我们仍然不知道根本原因,但是添加下面的代码可以确保它不会将“docs.google.com”多次附加到URL,如果该方法被多次调用(显然,由于某些设备上的原因,它正在执行此操作):

08-27 17:28:35.135  10460-10460/com.myapp.mobile W/BindingManager﹕ Cannot call determinedVisibility() - never saw a connection for the pid: 10460
08-27 17:28:35.135  10460-10460/com.myapp.mobile E/url﹕ https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=https://docs.google.com/gview?embedded=true&url=http://<LINK_TO_PDF_FILE>.pdf
08-29 00:01:45.821  14306-14306/com.myapp.mobile E/url﹕ http://docs.google.com/gview?embedded=true&url=http://<LINK_TO_PDF_FILE>.pdf
if (url != null && url.toLowerCase().contains(".pdf") && !url.toLowerCase().contains("docs.google.com")) {
        url = "https://docs.google.com/gview?embedded=true&url=" + url;
}