android h5混合开发返回键监听

android h5混合开发返回键监听

       在混合开发的时候,android返回键默认每次按返回都是返回上一页,而有时候我们的需求并不是这样的,如果返回的界面是有弹窗的,那么我们点击返回键需求就是关闭弹窗,而不是返回上一页,那么这时候我们就需要提供接口来进行判断,是否是按需求来返回,还是默认返回,那具体是怎么实现的呢?

tips: 主要是重写onKeyDown方法 ,在h5端提供_Native_backListener()方法,返回String或是boolean,若是返回ture,则由h5端处理,若是返回false,则默认返回。我的Activity是MainActivity

/**
 * 重写onKeyDown,当浏览网页,WebView可以后退时执行后退操作。
 * false 执行安卓返回方法即webview返回上一页 true 表示h5处理返回事件,android端不再处理
 * @param keyCode
 * @param event
 * @return
 */
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        webView.evaluateJavascript("javascript:_Native_backListener()", new ValueCallback<String>() {
            @Override
            public void onReceiveValue(String value) {
               if ("false".equals(value) || "null".equals(value)) {
                   goBack();
               }else if ("true".equals(value)){
                   // h5处理,客户端不做任何操作
               }
            }
        });
    }
    return true;
}

private void goBack(){
    if (webView.canGoBack()){
        webView.goBack();
    }else{
        // 网页不可返回上一页,按两次退出
        long now = System.currentTimeMillis();
        long delta = now - lastClickTime;
        if (delta > 3 * 1000) {
            backPressedCounter = 0;
        }
        lastClickTime = now;
        backPressedCounter++;
        if (backPressedCounter == 1) {
            mHandle.sendEmptyMessage(CLOSE_APP_TIP);
        } else if (backPressedCounter == 2) {
            MainActivity.this.finish();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/u013144287/article/details/80156179