1.首先 重写 onKeyDown方法  添加如下代码:

/** * 按键响应,在WebView中查看网页时,检查是否有可以前进的历史记录。 */@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {    // Check if the key event was the Back button and if there's history     if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {        // 返回键退回        webView.goBack();        return true;    }    // If it wasn't the Back key or there's no web page history, bubble up    // to the default    // system behavior (probably exit the activity)    return super.onKeyDown(keyCode, event);}

2.代码写到这里会出现一个问题,多次点击底部导航按钮 再点击返回键 会相应WebView的GoBack,导致在首页 底部导航反向跳而不退出应用 

解决办法,

   a.  声明成员变量 :

   private boolean isMainAvtivity = true;
b.onKeyDown方法中 改写成如下 意思是如果
isMainAvtivity是true的话 出走退出应用的代码 如果是false的话 相应webview的GoBack事件
/**
 * 按键响应,在WebView中查看网页时,检查是否有可以前进的历史记录。 */@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {    // Check if the key event was the Back button and if there's history    if (isMainAvtivity) {        if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {            if ((System.currentTimeMillis() - exitTime) > 2000) {                Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show();                exitTime = System.currentTimeMillis();            } else {                finish();            }            return true;        }        return true;    }    if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {        // 返回键退回        webView.goBack();        return true;    }    // If it wasn't the Back key or there's no web page history, bubble up    // to the default    // system behavior (probably exit the activity)    return super.onKeyDown(keyCode, event);}
3.
isMainAvtivity 的值 是通过过滤网页进行true或者false的赋值代码如下:
    // 覆盖WebView默认使用第三方或系统默认浏览器打开网页的行为,使网页用WebView打开        webView.setWebViewClient(new WebViewClient() {            @Override            public boolean shouldOverrideUrlLoading(WebView view, String url) {                if (!TextUtils.isEmpty(url)) {                    videoFlag = url.contains("vedio");                }                if (url.trim().startsWith("tel")) {//特殊情况tel,调用系统的拨号软件拨号【1111111111                    Intent i = new Intent(Intent.ACTION_VIEW);                    i.setData(Uri.parse(url));                    startActivity(i);                } else {                    String port = url.substring(url.lastIndexOf(":") + 1, url.lastIndexOf("/"));//尝试要拦截的视频通讯url格式(808端口):【http://xxxx:808/?roomName                    if (port.equals("808")) {//特殊情况【若打开的链接是视频通讯地址格式则调用系统浏览器打开】                        Intent i = new Intent(Intent.ACTION_VIEW);                        i.setData(Uri.parse(url));                        startActivity(i);                    } else {//其它非特殊情况全部放行                        view.loadUrl(url);                    }                }                return true;            }            @Override            public void onPageStarted(WebView view, String url, Bitmap favicon) {                Log.e("========", "66666 ");                //重新onPageStarted方法 如果加载的是一级页面 isMainActivity==true,                if ("http://..../index.php?a=/home/user/shouye.html".equals(url)) {                    isMainAvtivity = true;                }                if ("http://...../index.php?a=/home/shop/index.html".equals(url)) {                    isMainAvtivity = true;                }                if ("http://...../index.php?a=/home/user/zhuanpan.html".equals(url)) {                    isMainAvtivity = true;                }                if ("http://...../index.php?a=/home/user/index.html".equals(url)) {                    isMainAvtivity = true;                }                //如果是从一级页面跳转到二级的页面 通通给于false,可以用contains进行判断                if (url != null) {                    if (url.contains("http://...../index.php?a=/home/shop/xiangqing/id/")) {                        isMainAvtivity = false;                    }                }                if (url != null) {                    if (url.contains("http://...../index.php?a=/home/shop/jiesuan/id/")) {                        isMainAvtivity = false;                    }                }                if ("http://...../index.php?a=/home/user/shengji.html".equals(url)) {                    isMainAvtivity = false;                }                if ("http://...../index.php?a=/home/user/updatemembermsg.html".equals(url)) {                    isMainAvtivity = false;                }                if ("http://...../index.php?a=/home/user/zjgl.html".equals(url)) {                    isMainAvtivity = false;                }                if ("http://...../index.php?a=/home/user/dingdan.html".equals(url)) {                    isMainAvtivity = false;                }                if ("http://...../index.php?a=/home/user/userlist.html".equals(url)) {                    isMainAvtivity = false;                }                if ("http://...../index.php?a=/home/index/index.html".equals(url)) {                    isMainAvtivity = false;                }                if ("http://...../index.php?a=/home/user/cz_record.html".equals(url)) {                    isMainAvtivity = false;                }                if ("http://...../index.php?a=/home/user/chongzhi.html".equals(url)) {                    isMainAvtivity = false;                }                if ("http://...../index.php?a=/home/user/tixian.html".equals(url)) {                    isMainAvtivity = false;                }                if ("http://...../index.php?a=/home/user/tixian_record.html".equals(url)) {                    isMainAvtivity = false;                }                if ("http://...../index.php?a=/home/bonus/financialflow.html".equals(url)) {                    isMainAvtivity = false;                }                if ("http://...../index.php?a=/home/user/gonggao/param/1.html".equals(url)) {                    isMainAvtivity = false;                }                if ("http://...../index.php?a=/home/user/gonggao/param/2.html".equals(url)) {                    isMainAvtivity = false;                }                if ("http://...../index.php?a=/home/user/chongzhi".equals(url)) {                    isMainAvtivity = false;                }            }            @Override            public void onPageFinished(WebView view, String url) {                //页面加载完毕,结束对话框            }            @Override            public void onLoadResource(WebView view, String url) {                //加载页面资源,比如每加载一张图片就会调用            }            @Override            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {                //页面加载错误回掉                switch (errorCode) {                    case 404://                        view.loadUrl("file:///android_assets/error_handle.html");                        break;                }            }        });
3.至此 大功告成



更多相关文章

  1. 代码设置RadioButton的高端技巧 - wavky
  2. Android中如何在Eclipse中关联源代码?(图文)
  3. Android绘制进阶之三:在位图上(Bitmap)绘制位图(Bitmap)
  4. 写一个简单的Android计算器应用
  5. Android(安卓)8.1 bluetooth system architecture
  6. Android之TabLayout常见问题解决+TabLayout+ViewPager实现标签页
  7. Android客户端单线程下载
  8. ClassNotFoundException: Didn't find class "XXXView" on path:
  9. Android(安卓)在xml中配置 float 和 integer 值

随机推荐

  1. Android调用camera错误setParameters fai
  2. android 两种按钮的动画效果
  3. android NDK学习篇5之hello-jni——jni中
  4. 说说 Android(安卓)的 Material Design
  5. android之ListView上拉加载更多和下拉刷
  6. [置顶] 【SwipeRefreshLayout】Google官
  7. Eclipse如何开发Android?
  8. android进程等级以及startService与bouds
  9. Android(安卓)GMS module测试方法
  10. Android(安卓)studio中获取数字签名(SAH1)