在Android的WebView中显示PDF时如何追踪页面导航?

3
我正在使用Google文档在WebView中显示PDF。有没有办法知道用户何时移动到下一页?
我的需求是:我要通过WebView以PDF格式显示协议,当用户翻到下一页时,应出现一个复选框,所以我想跟踪页面更改。
我的场景描述:
如下图,WebView正在显示十页的PDF文件,当用户使用右上角的箭头翻到下一页时,我需要知道事件的更改。
我尝试使用onProgressChanged(),但没有帮助。
webView.setWebChromeClient(new WebChromeClient() {
           public void onProgressChanged(WebView view, int progress) {
             // Activities and WebViews measure progress with different scales.
             // The progress meter will automatically disappear when we reach 100%
               Toast toast = Toast.makeText(getApplicationContext(), "PAge change detected", Toast.LENGTH_LONG);
                toast.setGravity(Gravity.CENTER, 0, 0);
                toast.show();
           }
         });

我也尝试使用onLoadResource()shouldInterceptRequest(),但它们都没有起作用。


为什么不在显示PDF之前先显示协议呢? - Gabe Sechan
@GabeSechan 协议本身是以PDF格式呈现的。 - Anil M
2个回答

2
我不知道为什么在加载另一个页面时,shouldoverrideurl和onProgressChanged方法没有被调用,但是可以通过覆盖以下方法来解决这个问题:
@Override
public void onLoadResource(WebView view, String url) {
    Log.d("URL","Load Resource"+ url);
    super.onLoadResource(view, url);
}

它将显示带有页码的URL,以下是URL:

06-20 11:40:37.980: D/URL(5276):https://docs.google.com/gview?url=http%3A%2F%2F182.73.10.196%3A8001%2Fql%2FUnsignedAgreement%2Fexample.pdf&docid=a6653aac025f0eccbc5f96226923c79a&a=bi&pagenumber=2&w=253

在这个字符串中,你有页面编号可以编写逻辑来实现你的需求。

是的,当PDF文件第一次加载时会出现,但在导航到下一页时不会。 - Anil M
是的,通过点击右上角的按钮返回翻译后的文本,我无法控制那些按钮。 - Anil M
onLoadResource()每个URL只加载一次。因此,如果我想在同一个Webview中重新加载相同的URL,则该方法会失败。 - Anil M
仅仅因为它有缓存功能并不意味着它一定要这样做。Google Docs的机制是将文档转换成图像,并带有导航控制返回给Webview。当您点击下一页按钮时,它会将下一页作为资源加载并进行缓存。请问是否有任何方法可以避免缓存这些资源? - Brijesh Thakur
是的,这就是Google文档的工作方式!!难道没有清除缓存的选项吗?我也尝试了clearHistory(),但它没有起作用。 - Anil M

0

你可以使用onJsBeforeUnload,它会告诉你用户何时正在离开当前页面。 返回false将停止导航,返回true将允许导航。 或者按照适合你的需求处理它。

public boolean onJsBeforeUnload(WebView view, String url, String message,
        JsResult result) {
    return false;
}

我应该在哪里调用这个方法? - Anil M

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接