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(); } } }