Android webview与H5混合开发 -- H5双击返回键退出应用程序

一、Android与H5混合开发双击手机返回键退出APP的问题

1、项目场景:
(1)在APP内进行一系列操作之后,点击返回键只会一直返回,双击返回也在执行返回界面的操作,如何实现双击返回键退出应用的操作?
(2)App内有几个顶层界面,==需求是点击返回键提示再次点击即将退出当前APP==,若没做处理时会遇到:一直返回最后会返回到登录界面。
2、处理思路:
(1)Android webview 与js(vue)实现交互,然后Android接受特定的界面返回值来判断是否退出当前APP。还是返回上一层路由。具体实现可以参考这篇博客
(2)因为用第一种思路的时候,实现的不是很完美,不知道是不是我哪里操作错误,看了很久最后放弃了,跟公司的Android开发最后采取了下面这种方式去实现,思路如下:因为顶层页面的路由是固定的,所以我们通过在Android中去获取当前界面路由,截取关键字段,判断是否等于顶层界面路由字段,不等的话回退到上一个界面路由,相等的时候,给提示,然后连续点击即可退出APP。暂时在使用过程中还没有发现什么问题,如大家在使用过程中,有更好的处理方法和问题,欢迎大家在下方评论告知。

/**
* 首页五个界面URL的末尾字符
*/
private List strList = new ArrayList<>(Arrays.asList("/chatlist", "/friends", "/shop", "/cart", "/my"));
@Override
public void onBackPressed() {
//super.onBackPressed();
    String js = "appgoback()";
    webView.evaluateJavascript(js, new ValueCallback() {
        @Override
        public void onReceiveValue(String value) {
            long currentTime = System.currentTimeMillis();
            String url = webView.getUrl();
            String endUrl = url.substring(url.lastIndexOf("/"));
            //  判断在首页返回,退出界面
            if (strList.contains(endUrl)) {
                if ((currentTime - touchTime) >= waitTime) {
                    //让Toast的显示时间和等待时间相同
                    Toast.makeText(getApplicationContext(), "再按一次退出", (int) waitTime).show();
                    touchTime = currentTime;
                } else {
                    finish();
                }
                return;
            }

            d("value: " + value);
            if (value.equals("0")) {
                d("true", "equal");
                if (webView.canGoBack()) {
                    webView.goBack();
                } else {
                    moveTaskToBack(true);
                }
                return;
            }
            finish();
        }
    });
}

你可能感兴趣的:(javascript,前端,vue.js,android,html5)