1. 前言

混合开发中,如果当前操作的页面是H5写的。那么这个时候点击Android手机返回键,默认是返回到上一个页面,跟浏览器的回退功能是一样的,都是返回到历史记录中的前一个记录。看着好像没啥问题,但是当H5页面当前有一个弹窗,按照正常的交互,这会儿点击手机返回键,应该是关闭弹窗的,但是实际上却不是这样子,不仅仅关闭了弹窗,而且返回到了上一个页面。那我们该如何处理这种情况呢?

2. 解决方案

不是很复杂,就是让Android原生重写方法onKeyDown(),并且H5页面增加一个JS方法phoneBackButtonListener()。当点击了手机返回键,onKeyDown()就会被调用,同时也让Android原生主动调用H5页面的phoneBackButtonListener()。具体代码如下:

Android:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {if (mWebView != null) {if (keyCode == KeyEvent.KEYCODE_BACK) {mWebView.evaluateJavascript("javascript:phoneBackButtonListener()", new ValueCallback<String>() {@Overridepublic void onReceiveValue(String value) {// value的值为"true"时,H5页面屏蔽手机返回键// value的值为"false"或"null"时,H5页面不屏蔽手机返回键// phoneBackButtonListener()未定义或没有返回任何数据,则value的值为"null"if ("false".equals(value) || "null".equals(value)) {// 执行原生的处理逻辑}}});return true;}}return super.onKeyDown(keyCode, event);
}

H5:

/* 监听手机的返回键,如果H5页面要拦截,则返回true;如果不拦截,则返回false */
function phoneBackButtonListener() {// 执行H5的处理逻辑return true;
}

完整的demo可以查看 AndroidWebView。

如果想进一步交流和学习的同学,可以加一下QQ群哦!

混合开发中,H5页面如何监听Android手机返回键相关推荐

  1. 移动端监听安卓手机返回键

    [场景] 相信大家用安卓手机使用APP的过程中,会遇到这样的一个场景:按下手机的返回键时,会弹出一个询问框:"是否退出该页面/APP?",然后点击了确认键才真正退出APP.PC端目 ...

  2. 移动端监听安卓手机返回键 1

    [场景] 相信大家用安卓手机使用APP的过程中,会遇到这样的一个场景:按下手机的返回键时,会弹出一个询问框:"是否退出该页面/APP?",然后点击了确认键才真正退出APP.PC端目 ...

  3. android 监听物理返回键,Android应用开发之react-native 监听Android物理返回键

    本文将带你了解Android应用开发之react-native 监听Android物理返回键,希望本文对大家学Android有所帮助. 1. componentWillMount(){         ...

  4. mui+vue监听安卓手机返回键

    1.引入mui之后,在index.html中初始化mui,可以不设置keyEventBind,默认监听back,menu键 <!-- 引入mui --><script src=&qu ...

  5. JS监听安卓手机返回键

    window.addEventListener("popstate", function(e) {alert('你点了返回键')}, false); 亲测可用

  6. js监听移动端返回键,从内页返回首页

    js监听移动端返回键,从内页返回首页 直接上代码. $(document).ready(function () {window.history.pushState("", &quo ...

  7. Android 开发中的View事件监听机制

    在开发过程中,我们常常根据实际的需要绘制自己的应用组件,那么定制自己的监听事件,及相应的处理方法是必要的.我们都知道Android中,事件的监听是基于回调机制的,比如常用的OnClick事件,你了解它 ...

  8. 如何监听安卓机返回键和苹果机微信的返回键事件

    应用场景:开发众筹系统的时候,点击捐款按钮弹出金额选择及输入的部分,最新的需求是按微信(ios)返回键和安卓机的返回键,若点开了捐款的选择金额部分,不能返回到上一页,只能隐藏该模块. 延伸:图片插件, ...

  9. 混合开发与移动端--H5混合开发、H5页面的开发布局、开发注意事项、H5与原生(安卓)交互、webpack打包优化解决方案、H5调试工具、webview

    H5混合开发 混合开发.原生开发.H5开发的区别: 简述:主流APP:原生APP.H5(webapp).混合APP,相对应的定制研发即原生开发.H5开发.混合开发 原生APP开发优缺点: 可以访问手机 ...

最新文章

  1. Zend Framework Mail通过网易免费邮箱发送邮件
  2. spark 算子例子_10年大数据架构师,用一文带你玩转Spark计算框架,你能读懂吗?...
  3. shell mysql e_xshell怎么搭建mysql
  4. 基于帝国cms 7.5带支付个人也可以使用的h5微信商城
  5. 【Servlet】request对象获取请求头数据和用户数据
  6. 如何使用repo sync
  7. sql server 2008 r2卸载重装_免费下载:Intouch软件、Windows操作系统、SQL数据库,VB6.0、C#...
  8. 用 wait-notify 写一段代码来解决生产者-消费者问题
  9. 如何通过 Web 实现防御木马、病毒...... | 原力计划
  10. 二进制补码以及为什么要使用补码
  11. JSP三大指令、七大动作、九大对象
  12. Razor 将C#对象转换成Javascript对象, json还原被转码的字符 ·· HTML转义符
  13. String,StringBuff,Stringbuilder三者的理解以及练习题
  14. 车载通信与导航(七):D2D通信详解
  15. 最详细新版网课联盟27刷网课平台源码+安装教程+最新模板+下载地址
  16. 液化气瓶监管技术如何做到正确选型
  17. Centos7 安装部署apache。简单易上手
  18. 基于Range Image的自主车辆激光雷达定位(ICRA 2021)
  19. 转自BMY 海量数据的处理
  20. springboot毕设项目教师绩效工资管理l1v8p(java+VUE+Mybatis+Maven+Mysql)

热门文章

  1. 免费售后——公司办公电脑配置单2500到4500档(包含显示器)
  2. [cv]郑哲东 Deep-ReID——Learn pedestrian representations from
  3. 【阴阳师】真蛇10层记录
  4. 模拟人生4 春夏秋冬、星梦起飞版更新下载方法以及常见问题
  5. 使用patch给代码打补丁,快速高效、patch -p1 和p0 的区别
  6. banq修复_SM3271AB_慧荣SM3271AB U盘量产加密及修复教程 - 系统部
  7. SEER数据库中肿瘤发病率计算并绘制发病率趋势图
  8. Scratch:变量与抛物线
  9. 解决nrm不能使用问题
  10. 分部积分法的快速运算:表格法