每天学习一点点,成功增加一大步

WebView 监听手机的物理返回键

Android zhanghui 2690℃

为减轻 android APP 在原生代码下花费的时间,通常用 WebView 来加载本地 H5 的方式,但如果 WebView 默认下是不对手机的三个物理按键键作监听的,这样就很容易导致一个返回键令这个 APP 马上退出,但有时有误操作可能,这样就造成对使用者的麻烦。

所以这里就给出几个加返回键监听的方法。

方案1:给 WebView 设置 setOnKeyListener

webView.setOnKeyListener(new View.OnKeyListener() {

    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_DOWN) {
            // 监听手机的返回键
            if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) {
                webView.goBack();
                return true;
            }
        }
        return false;
    }

});

但这种方案虽然解决了返回键不容易退出,并让它的作用放在了页面的【后退】功能上。可这并不是很人性化,返回键做不到退出 APP 的作用了,正常 APP 的个性化是可以连续按两下返回键退出 APP,而不是一直退不出(这有点流氓的感觉了)。

方案2:重写 Activity 的 onKeyDown 方法

// 退出时间
    private long currentBackPressedTime = 0;
    // 退出间隔
    private static finalint BACK_PRESSED_INTERVAL = 2000;

……

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
            closeApp();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

private void closeApp() {
        if ((System.currentTimeMillis() - currentBackPressedTime) > BACK_PRESSED_INTERVAL ) {
            Common.Toast(this, "再按一次退出");
            currentBackPressedTime = System.currentTimeMillis();
        } else {
            finish();
            System.exit(0);
        }
    }

这样就解决了连续按两下返回键,才会退出 Activity 的问题,但如果和方案1中的代码搭配使用时,依然会回到方案1的那种现象,如何让它化解冲突?

可以优化一下 closeApp 方法中的代码:

private void closeApp() {
        if ((System.currentTimeMillis() - closeAppTime) > BACK_PRESSED_INTERVAL) {
            Common.Toast(this, "再按一次退出");
            closeAppTime = System.currentTimeMillis();
            MyWebView.getWebView().goBack();
        } else {
            finish();
            System.exit(0);
        }
    }

而在 MyWebView 类中有个返回 getWebView 的方法


    public static WebView getWebView() {
        return webView;
    }

转载请注明:隨習筆記 » WebView 监听手机的物理返回键

喜欢 (8)