简单的看了一遍API,没有发现webView的方法中有检测最后一次跳转的方法,确实也是,这个也确实不好检测。只要自己简单写一个了,也许会有很多的漏洞,不过勉强还是可以使用的。
原理就是重写WebViewClient中的onPageStarted和onPageFinished方法。
每次Finished的时候调用一个线程来监听若干秒之后是否有新的加载,如果没有,则是最后一次跳转。如果有,则在started方法中停止这个线程。
public class LastJumpWebView extends WebView{
Timer timer=new Timer();
MyTask task;
public LastJumpWebView(Context context) {
super(context);
setWebViewClient(new MyWebViewClient());
setWebChromeClient(new WebChromeClient());
}
class MyWebViewClient extends WebViewClient{
@Override
public void onPageFinished(WebView view, String url) {
task=new MyTask(url);
timer.schedule(task, 1000);
super.onPageFinished(view, url);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
if(task!=null){
task.cancel();
}
super.onPageStarted(view, url, favicon);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
return super.shouldOverrideUrlLoading(view, url);
}
}
class MyWebChromeClient extends WebChromeClient{
@Override
public void onProgressChanged(WebView view, int newProgress) {
Log.e("TEST", "进度:"+newProgress);
super.onProgressChanged(view, newProgress);
}
}
class MyTask extends TimerTask{
String url;
public MyTask(String url) {
this.url=url;
}
@Override
public void run() {
Log.e("TEST", "this is last page, url:"+url);
}
}
}