【问题标题】:Detect if user has completed Intent.ACTION_VIEW or just hit BACK检测用户是否完成了 Intent.ACTION_VIEW 或者只是点击 BACK
【发布时间】:2012-12-10 10:13:58
【问题描述】:

我有一个 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;
                }


            }

     });

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

【问题讨论】:

  • “不可能”也是一种解决方案。
  • 喜欢你的态度。一切顺利。
  • 所以你想为这个 webview 实现返回键事件?
  • 不,当 Intent 启动时,您可以选择要用于完成 Action.View 的应用程序,我想知道用户是否实际选择了选项或回击

标签: android


【解决方案1】:

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

初始化 => boolean 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);
  }

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

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

【讨论】:

  • 耶,这是一种解决方法,如果没有人提供更好的答案,我会接受它,我知道我可以这样做,我只是认为可能还有其他东西......
【解决方案2】:

另一种可能的解决方案:使用startActivityForResult(intent, 1) 而不是startActivity(intent) 并以这种方式检查requestCoderesultCode

@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(电子邮件、相机等)

【讨论】:

猜你喜欢
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-01
  • 1970-01-01
  • 2020-10-11
  • 1970-01-01
  • 2023-03-29
相关资源
最近更新 更多