1

我有一个 webview,点击一些横幅,我发送 Intent.ACTION_VIEW 来打开浏览器或任何用户认为合适的东西,如下所示:

  w.setWebViewClient(new WebViewClient(){
         @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
             if (url != null && url.startsWith("http://")) {
                    view.getContext().startActivity(
                        new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
                    return true;
                } else {

                    return false;
                }


            }

     });

现在我想要的是找到一种方法来了解用户是在打开浏览器之前点击返回按钮还是他实际打开了浏览器。我发现了这个问题,但那里没有解决方案

4

2 回答 2

2

你可以做一件事,这可能不是最好的做法,但我认为这会解决你的问题

初始化 =>布尔 isPageLoading = false;

webview.setWebViewClient(new WebViewClient() {  
 public boolean shouldOverrideUrlLoading(WebView view, String url)  {                  

            return true;    
        }

        public void onPageFinished(WebView view, String url) {
            isPageLoading = false;             
        }
       public void onPageStarted(WebView view, String url, Bitmap favicon){
            isPageLoading = true;
        }
    });  

现在你有正确的指示器来说明页面是否正在加载。

现在在您的活动中覆盖返回按键事件

  @Override
  public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK)) { // Back key pressed
                    if(isPageLoading){
                       // Do the tasks you want to do when page is loading
                    }else{
                       // Do the tasks you want to do when page loading is finished (or not in progress)
                     }
        return true;
    }
    return super.onKeyDown(keyCode, event);
  }

请注意,您可以通过添加更多布尔变量来更改此功能的行为,这些变量将指示不同的状态信息(例如页面加载是否已开始等)

希望这将解决您提出的问题

于 2012-12-10T10:43:33.007 回答
1

另一种可能的解决方案:使用startActivityForResult(intent, 1)代替并以这种方式startActivity(intent)检查requestCode和:resultCode

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == 1) {
        //intent 1 was
        if(resultCode == Activity.RESULT_OK) {
             //successful
        } else {
             //not succusseful
        }
    }
}

这适用于大多数类型的 Intent(电子邮件、相机等)

于 2013-04-16T08:05:08.990 回答